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

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

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


Revision 1.12 - (show annotations) (download)
Wed Jan 10 23:51:35 2007 UTC (17 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.11: +1 -1 lines
FILE REMOVED
rename gad_init.F to gad_init_fixed.F (before adding a gad_init_varia S/R)

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

  ViewVC Help
Powered by ViewVC 1.1.22