forked from darwinproject/darwin3
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ptracers_init_varia.F
134 lines (114 loc) · 3.34 KB
/
ptracers_init_varia.F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "PTRACERS_OPTIONS.h"
#include "GAD_OPTIONS.h"
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: PTRACERS_INIT_VARIA
C !INTERFACE:
SUBROUTINE PTRACERS_INIT_VARIA( myThid )
C !DESCRIPTION:
C Initialize PTRACERS data structures
C !USES:
#include "PTRACERS_MOD.h"
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "GAD.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS_PARAMS.h"
#include "PTRACERS_START.h"
#include "PTRACERS_FIELDS.h"
C !INPUT PARAMETERS:
C myThid :: thread number
INTEGER myThid
#ifdef ALLOW_PTRACERS
C !LOCAL VARIABLES:
C i,j,k,bi,bj,iTracer :: loop indices
INTEGER i,j,k,bi,bj,iTracer
#ifdef PTRACERS_ALLOW_DYN_STATE
INTEGER n
#endif
CHARACTER*(MAX_LEN_FNAM) tmpInitialFile
CEOP
C Initialise internal parameter in common block:
_BEGIN_MASTER( myThid )
DO iTracer = 1, PTRACERS_num
PTRACERS_StepFwd(iTracer) = .TRUE.
PTRACERS_startAB(iTracer) = nIter0 - PTRACERS_Iter0
ENDDO
_END_MASTER( myThid )
_BARRIER
C Loop over tracers
DO iTracer = 1, PTRACERS_num
C Loop over tiles
DO bj = myByLo(myThid), myByHi(myThid)
DO bi = myBxLo(myThid), myBxHi(myThid)
C Initialize arrays in common blocks :
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
pTracer(i,j,k,bi,bj,iTracer) = PTRACERS_ref(k,iTracer)
gpTrNm1(i,j,k,bi,bj,iTracer) = 0. _d 0
ENDDO
ENDDO
ENDDO
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
surfaceForcingPTr(i,j,bi,bj,iTracer) = 0. _d 0
ENDDO
ENDDO
#ifdef PTRACERS_ALLOW_DYN_STATE
C Initialize SOM array :
IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
DO n = 1,nSOM
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
_Ptracers_som(i,j,k,bi,bj,n,iTracer) = 0. _d 0
ENDDO
ENDDO
ENDDO
ENDDO
ENDIF
#endif /* PTRACERS_ALLOW_DYN_STATE */
C end bi,bj loops
ENDDO
ENDDO
C end of Tracer loop
ENDDO
C Now read initial conditions and always exchange
IF (nIter0.EQ.PTRACERS_Iter0) THEN
DO iTracer = 1, PTRACERS_numInUse
tmpInitialFile = PTRACERS_initialFile(iTracer)
IF ( tmpInitialFile .NE. ' ' ) THEN
CALL READ_FLD_XYZ_RL(tmpInitialFile,' ',
& pTracer(1-OLx,1-OLy,1,1,1,iTracer),0,myThid)
_EXCH_XYZ_RL(pTracer(1-OLx,1-OLy,1,1,1,iTracer),myThid)
ENDIF
ENDDO
ENDIF
C Apply mask
DO iTracer = 1, PTRACERS_numInUse
DO bj = myByLo(myThid), myByHi(myThid)
DO bi = myBxLo(myThid), myBxHi(myThid)
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
IF (maskC(i,j,k,bi,bj).EQ.0.)
& pTracer(i,j,k,bi,bj,iTracer)=0. _d 0
ENDDO
ENDDO
ENDDO
ENDDO
ENDDO
ENDDO
C Read from a pickup file if needed
IF ( nIter0.GT.PTRACERS_Iter0 .OR.
& (nIter0.EQ.PTRACERS_Iter0 .AND. pickupSuff.NE.' ')
& ) THEN
CALL PTRACERS_READ_PICKUP( nIter0, myThid )
ENDIF
#endif /* ALLOW_PTRACERS */
RETURN
END