/[MITgcm]/MITgcm/pkg/generic_advdiff/gad_init_fixed.F
ViewVC logotype

Contents of /MITgcm/pkg/generic_advdiff/gad_init_fixed.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (show annotations) (download)
Tue Apr 28 23:27:24 2009 UTC (15 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint61n, checkpoint61o, checkpoint61m, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.5: +2 -2 lines
call WRITE_0D_RL (instead of WRITE_0D_R8) to print "RL" parameters

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_init_fixed.F,v 1.5 2008/04/18 19:39:48 jahn Exp $
2 C $Name: $
3
4 #include "GAD_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: GAD_INIT_FIXED
8 C !INTERFACE:
9 SUBROUTINE GAD_INIT_FIXED( myThid )
10 C !DESCRIPTION:
11 C Routine to initialize Generic Advection/Diffusion variables and
12 C constants.
13
14 C !USES:
15 IMPLICIT NONE
16 C === Global variables ===
17 #include "SIZE.h"
18 #include "EEPARAMS.h"
19 #include "PARAMS.h"
20 #include "GAD.h"
21
22 C !INPUT/OUTPUT PARAMETERS:
23 C === Routine arguments ===
24 C myThid :: My Thread Id. number
25 INTEGER myThid
26 CEOP
27
28 C === Local variables ===
29 C msgBuf :: Informational/error meesage buffer
30 CHARACTER*(MAX_LEN_MBUF) msgBuf
31 INTEGER minOlSize
32 INTEGER n
33
34 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
35
36 _BEGIN_MASTER(myThid)
37
38 C-- Set SOM I/O suffix (used for pickup, diagnostics ...)
39 DO n=1,nSOM
40 somSfx(n) = ' '
41 IF (n.EQ.1) somSfx(n) = '_x'
42 IF (n.EQ.2) somSfx(n) = '_y'
43 IF (n.EQ.3) somSfx(n) = '_z'
44 IF (n.EQ.4) somSfx(n) = 'xx'
45 IF (n.EQ.5) somSfx(n) = 'yy'
46 IF (n.EQ.6) somSfx(n) = 'zz'
47 IF (n.EQ.7) somSfx(n) = 'xy'
48 IF (n.EQ.8) somSfx(n) = 'xz'
49 IF (n.EQ.9) somSfx(n) = 'yz'
50 ENDDO
51
52 C-- Set Temp & Salt 2nd-Order Moment Advec. flag according to advection scheme
53 tempSOM_Advection = tempAdvScheme.GE.ENUM_SOM_PRATHER
54 & .AND. tempAdvScheme.LE.ENUM_SOM_LIMITER
55 tempSOM_Advection = tempSOM_Advection .AND. tempAdvection
56 saltSOM_Advection = saltAdvScheme.GE.ENUM_SOM_PRATHER
57 & .AND. saltAdvScheme.LE.ENUM_SOM_LIMITER
58 saltSOM_Advection = saltSOM_Advection .AND. saltAdvection
59
60 C-- Set Temp & Salt multi-Dim Advec. flag according to advection scheme used
61 tempMultiDimAdvec = multiDimAdvection .AND. tempAdvection
62 saltMultiDimAdvec = multiDimAdvection .AND. saltAdvection
63 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
64 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
65 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
66 tempMultiDimAdvec = .FALSE.
67 ENDIF
68 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
69 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
70 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
71 saltMultiDimAdvec = .FALSE.
72 ENDIF
73
74 C-- Set general multi-Dim Advec. flag when at least 1 tracer use multi-Dim Advec.
75 useMultiDimAdvec = useMultiDimAdvec.OR.tempMultiDimAdvec
76 useMultiDimAdvec = useMultiDimAdvec.OR.saltMultiDimAdvec
77
78 C-- Set Temp & Salt Adams-Bashforth flag according to advection scheme used
79 AdamsBashforthGt = .FALSE.
80 AdamsBashforthGs = .FALSE.
81 AdamsBashforth_T = .FALSE.
82 AdamsBashforth_S = .FALSE.
83 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
84 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
85 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
86 AdamsBashforthGt = tempStepping
87 ENDIF
88 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
89 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
90 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
91 AdamsBashforthGs = saltStepping
92 ENDIF
93 #ifdef ALLOW_ADAMSBASHFORTH_3
94 C- For now, A-B on T,S is only implemented in AB-3 code, and not working
95 C with synchronous time-step, which would require to do also AB(u,v,w)
96 IF ( .NOT.doAB_onGtGs .AND.
97 & (staggerTimeStep .OR. implicitIntGravWave) ) THEN
98 AdamsBashforth_T = AdamsBashforthGt
99 AdamsBashforth_S = AdamsBashforthGs
100 AdamsBashforthGt = .FALSE.
101 AdamsBashforthGs = .FALSE.
102 ENDIF
103 #endif /* ALLOW_ADAMSBASHFORTH_3 */
104
105 #ifdef GAD_SMOLARKIEWICZ_HACK
106 SmolarkiewiczMaxFrac = 1. _d 0
107 #endif
108
109 _END_MASTER(myThid)
110
111 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
112
113 #ifdef ALLOW_DIAGNOSTICS
114 IF ( useDiagnostics ) THEN
115 C-- Add diagnostics of Temp & Salt fluxes to the (long) list of diagnostics:
116 CALL GAD_DIAGNOSTICS_INIT( myThid )
117 ENDIF
118 #endif /* ALLOW_DIAGNOSTICS */
119
120 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
121
122 C-- Print out GAD parameters :
123 _BEGIN_MASTER(myThid)
124
125 WRITE(msgBuf,'(A)') ' '
126 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
127 WRITE(msgBuf,'(A)') '// ==================================='
128 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
129 WRITE(msgBuf,'(A)')'// GAD parameters :'
130 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
131 WRITE(msgBuf,'(A)') '// ==================================='
132 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
133
134 CALL WRITE_0D_I( tempAdvScheme, INDEX_NONE,
135 & 'tempAdvScheme =',
136 & ' /* Temp. Horiz.Advection scheme selector */')
137 CALL WRITE_0D_I( tempVertAdvScheme, INDEX_NONE,
138 & 'tempVertAdvScheme =',
139 & ' /* Temp. Vert. Advection scheme selector */')
140 CALL WRITE_0D_L( tempMultiDimAdvec, INDEX_NONE,
141 & 'tempMultiDimAdvec =',
142 & ' /* use Muti-Dim Advec method for Temp */')
143 CALL WRITE_0D_L( tempSOM_Advection, INDEX_NONE,
144 & 'tempSOM_Advection =',
145 & ' /* use 2nd Order Moment Advection for Temp */')
146 CALL WRITE_0D_L( AdamsBashforthGt, INDEX_NONE,
147 & 'AdamsBashforthGt =',
148 & ' /* apply Adams-Bashforth extrapolation on Gt */')
149 CALL WRITE_0D_L( AdamsBashforth_T, INDEX_NONE,
150 & 'AdamsBashforth_T =',
151 & ' /* apply Adams-Bashforth extrapolation on Temp */')
152
153 CALL WRITE_0D_I( saltAdvScheme, INDEX_NONE,
154 & 'saltAdvScheme =',
155 & ' /* Salt. Horiz.advection scheme selector */')
156 CALL WRITE_0D_I( saltVertAdvScheme, INDEX_NONE,
157 & 'saltVertAdvScheme =',
158 & ' /* Salt. Vert. Advection scheme selector */')
159 CALL WRITE_0D_L( saltMultiDimAdvec, INDEX_NONE,
160 & 'saltMultiDimAdvec =',
161 & ' /* use Muti-Dim Advec method for Salt */')
162 CALL WRITE_0D_L( saltSOM_Advection, INDEX_NONE,
163 & 'saltSOM_Advection =',
164 & ' /* use 2nd Order Moment Advection for Salt */')
165 CALL WRITE_0D_L( AdamsBashforthGs, INDEX_NONE,
166 & 'AdamsBashforthGs =',
167 & ' /* apply Adams-Bashforth extrapolation on Gs */')
168 CALL WRITE_0D_L( AdamsBashforth_S, INDEX_NONE,
169 & 'AdamsBashforth_S =',
170 & ' /* apply Adams-Bashforth extrapolation on Salt */')
171 #ifdef GAD_SMOLARKIEWICZ_HACK
172 CALL WRITE_0D_RL( SmolarkiewiczMaxFrac, INDEX_NONE,
173 & 'SmolarkiewiczMaxFrac =',
174 & ' /* maximal fraction of tracer to flow out of a cell */')
175 #endif
176
177 WRITE(msgBuf,'(A)') '// ==================================='
178 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
179
180 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
181
182 C-- Check size of the overlap :
183 IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
184 C- multi-dim-advection on CS-grid requires to double the size of Olx,Oly
185 minOlSize = 2
186 IF ( tempMultiDimAdvec ) THEN
187 IF ( tempAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
188 & tempAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
189 & tempAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
190 ENDIF
191 IF ( saltMultiDimAdvec ) THEN
192 IF ( saltAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
193 & saltAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
194 & saltAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
195 ENDIF
196 IF ( Olx.LT.minOlSize .OR. Oly.LT.minOlSize ) THEN
197 WRITE(msgBuf,'(A)')
198 & 'GAD_INIT_FIXED: Multi-Dim Advection with 5-points stencil'
199 CALL PRINT_ERROR( msgBuf , myThid)
200 WRITE(msgBuf,'(A,I2)')
201 & 'GAD_INIT_FIXED: advection scheme needs at least Olx,Oly=',
202 & minOlSize
203 CALL PRINT_ERROR( msgBuf , myThid)
204 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
205 ENDIF
206 ENDIF
207
208 _END_MASTER(myThid)
209 _BARRIER
210
211 RETURN
212 END

  ViewVC Help
Powered by ViewVC 1.1.22