/[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.3 - (show annotations) (download)
Fri Oct 19 14:43:10 2007 UTC (16 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint59m, checkpoint59l, checkpoint59n, checkpoint59i, checkpoint59k, checkpoint59j
Changes since 1.2: +1 -7 lines
prepare for "clever pickup" implementation:
move parameters from PARAMS.h & GAD.h to new header file RESTART.h

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_init_fixed.F,v 1.2 2007/01/16 04:38:34 jmc 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 - Number of this instance of GAD_INIT_FIXED
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
33 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
34
35 _BEGIN_MASTER(myThid)
36
37 C-- Set Temp & Salt 2nd-Order Moment Advec. flag according to advection scheme
38 tempSOM_Advection = tempAdvScheme.GE.ENUM_SOM_PRATHER
39 & .AND. tempAdvScheme.LE.ENUM_SOM_LIMITER
40 tempSOM_Advection = tempSOM_Advection .AND. tempAdvection
41 saltSOM_Advection = saltAdvScheme.GE.ENUM_SOM_PRATHER
42 & .AND. saltAdvScheme.LE.ENUM_SOM_LIMITER
43 saltSOM_Advection = saltSOM_Advection .AND. saltAdvection
44
45 C-- Set Temp & Salt multi-Dim Advec. flag according to advection scheme used
46 tempMultiDimAdvec = multiDimAdvection .AND. tempAdvection
47 saltMultiDimAdvec = multiDimAdvection .AND. saltAdvection
48 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
49 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
50 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
51 tempMultiDimAdvec = .FALSE.
52 ENDIF
53 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
54 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
55 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
56 saltMultiDimAdvec = .FALSE.
57 ENDIF
58
59 C-- Set general multi-Dim Advec. flag when at least 1 tracer use multi-Dim Advec.
60 useMultiDimAdvec = useMultiDimAdvec.OR.tempMultiDimAdvec
61 useMultiDimAdvec = useMultiDimAdvec.OR.saltMultiDimAdvec
62
63 C-- Set Temp & Salt Adams-Bashforth flag according to advection scheme used
64 AdamsBashforthGt = .FALSE.
65 AdamsBashforthGs = .FALSE.
66 AdamsBashforth_T = .FALSE.
67 AdamsBashforth_S = .FALSE.
68 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
69 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
70 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
71 AdamsBashforthGt = tempStepping
72 ENDIF
73 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
74 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
75 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
76 AdamsBashforthGs = saltStepping
77 ENDIF
78 #ifdef ALLOW_ADAMSBASHFORTH_3
79 C- For now, A-B on T,S is only implemented in AB-3 code, and not working
80 C with synchronous time-step, which would require to do also AB(u,v,w)
81 IF ( .NOT.doAB_onGtGs .AND.
82 & (staggerTimeStep .OR. implicitIntGravWave) ) THEN
83 AdamsBashforth_T = AdamsBashforthGt
84 AdamsBashforth_S = AdamsBashforthGs
85 AdamsBashforthGt = .FALSE.
86 AdamsBashforthGs = .FALSE.
87 ENDIF
88 #endif /* ALLOW_ADAMSBASHFORTH_3 */
89
90 _END_MASTER(myThid)
91
92 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
93
94 #ifdef ALLOW_DIAGNOSTICS
95 IF ( useDiagnostics ) THEN
96 C-- Add diagnostics of Temp & Salt fluxes to the (long) list of diagnostics:
97 CALL GAD_DIAGNOSTICS_INIT( myThid )
98 ENDIF
99 #endif /* ALLOW_DIAGNOSTICS */
100
101 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
102
103 C-- Print out GAD parameters :
104 _BEGIN_MASTER(myThid)
105
106 WRITE(msgBuf,'(A)') ' '
107 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
108 WRITE(msgBuf,'(A)') '// ==================================='
109 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
110 WRITE(msgBuf,'(A)')'// GAD parameters :'
111 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
112 WRITE(msgBuf,'(A)') '// ==================================='
113 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
114
115 CALL WRITE_0D_I( tempAdvScheme, INDEX_NONE,
116 & 'tempAdvScheme =',
117 & ' /* Temp. Horiz.Advection scheme selector */')
118 CALL WRITE_0D_I( tempVertAdvScheme, INDEX_NONE,
119 & 'tempVertAdvScheme =',
120 & ' /* Temp. Vert. Advection scheme selector */')
121 CALL WRITE_0D_L( tempMultiDimAdvec, INDEX_NONE,
122 & 'tempMultiDimAdvec =',
123 & ' /* use Muti-Dim Advec method for Temp */')
124 CALL WRITE_0D_L( tempSOM_Advection, INDEX_NONE,
125 & 'tempSOM_Advection =',
126 & ' /* use 2nd Order Moment Advection for Temp */')
127 CALL WRITE_0D_L( AdamsBashforthGt, INDEX_NONE,
128 & 'AdamsBashforthGt =',
129 & ' /* apply Adams-Bashforth extrapolation on Gt */')
130 CALL WRITE_0D_L( AdamsBashforth_T, INDEX_NONE,
131 & 'AdamsBashforth_T =',
132 & ' /* apply Adams-Bashforth extrapolation on Temp */')
133
134 CALL WRITE_0D_I( saltAdvScheme, INDEX_NONE,
135 & 'saltAdvScheme =',
136 & ' /* Salt. Horiz.advection scheme selector */')
137 CALL WRITE_0D_I( saltVertAdvScheme, INDEX_NONE,
138 & 'saltVertAdvScheme =',
139 & ' /* Salt. Vert. Advection scheme selector */')
140 CALL WRITE_0D_L( saltMultiDimAdvec, INDEX_NONE,
141 & 'saltMultiDimAdvec =',
142 & ' /* use Muti-Dim Advec method for Salt */')
143 CALL WRITE_0D_L( saltSOM_Advection, INDEX_NONE,
144 & 'saltSOM_Advection =',
145 & ' /* use 2nd Order Moment Advection for Salt */')
146 CALL WRITE_0D_L( AdamsBashforthGs, INDEX_NONE,
147 & 'AdamsBashforthGs =',
148 & ' /* apply Adams-Bashforth extrapolation on Gs */')
149 CALL WRITE_0D_L( AdamsBashforth_S, INDEX_NONE,
150 & 'AdamsBashforth_S =',
151 & ' /* apply Adams-Bashforth extrapolation on Salt */')
152
153 WRITE(msgBuf,'(A)') '// ==================================='
154 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
155
156 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
157
158 C-- Check size of the overlap :
159 IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
160 C- multi-dim-advection on CS-grid requires to double the size of Olx,Oly
161 minOlSize = 2
162 IF ( tempMultiDimAdvec ) THEN
163 IF ( tempAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
164 & tempAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
165 & tempAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
166 ENDIF
167 IF ( saltMultiDimAdvec ) THEN
168 IF ( saltAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
169 & saltAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
170 & saltAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
171 ENDIF
172 IF ( Olx.LT.minOlSize .OR. Oly.LT.minOlSize ) THEN
173 WRITE(msgBuf,'(A)')
174 & 'GAD_INIT_FIXED: Multi-Dim Advection with 5-points stencil'
175 CALL PRINT_ERROR( msgBuf , myThid)
176 WRITE(msgBuf,'(A,I2)')
177 & 'GAD_INIT_FIXED: advection scheme needs at least Olx,Oly=',
178 & minOlSize
179 CALL PRINT_ERROR( msgBuf , myThid)
180 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
181 ENDIF
182 ENDIF
183
184 _END_MASTER(myThid)
185 _BARRIER
186
187 RETURN
188 END

  ViewVC Help
Powered by ViewVC 1.1.22