/[MITgcm]/MITgcm_contrib/many_tracers/new_code/gad_init.F
ViewVC logotype

Contents of /MITgcm_contrib/many_tracers/new_code/gad_init.F

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


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Thu Jun 15 02:23:55 2006 UTC (17 years, 11 months ago) by cnh
Branch: initial, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
Initial checkin

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_init.F,v 1.10 2006/02/23 16:32:22 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 C-- Set Temp & Salt multi-Dim Advec. flag according to advection scheme used
36 tempMultiDimAdvec = multiDimAdvection .AND. tempAdvection
37 saltMultiDimAdvec = multiDimAdvection .AND. saltAdvection
38 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
39 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
40 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
41 tempMultiDimAdvec = .FALSE.
42 ENDIF
43 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
44 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
45 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
46 saltMultiDimAdvec = .FALSE.
47 ENDIF
48
49 C-- Set general multi-Dim Advec. flag when at least 1 tracer use multi-Dim Advec.
50 useMultiDimAdvec = .FALSE.
51 useMultiDimAdvec = useMultiDimAdvec.OR.tempMultiDimAdvec
52 useMultiDimAdvec = useMultiDimAdvec.OR.saltMultiDimAdvec
53
54 C-- Set Temp & Salt Adams-Bashforth flag according to advection scheme used
55 AdamsBashforthGt = .FALSE.
56 AdamsBashforthGs = .FALSE.
57 AdamsBashforth_T = .FALSE.
58 AdamsBashforth_S = .FALSE.
59 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
60 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
61 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
62 AdamsBashforthGt = tempStepping
63 ENDIF
64 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
65 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
66 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
67 AdamsBashforthGs = saltStepping
68 ENDIF
69 #ifdef ALLOW_ADAMSBASHFORTH_3
70 C- For now, A-B on T,S is only implemented in AB-3 code, and not working
71 C with synchronous time-step, which would require to do also AB(u,v,w)
72 IF ( .NOT.doAB_onGtGs .AND.
73 & (staggerTimeStep .OR. implicitIntGravWave) ) THEN
74 AdamsBashforth_T = AdamsBashforthGt
75 AdamsBashforth_S = AdamsBashforthGs
76 AdamsBashforthGt = .FALSE.
77 AdamsBashforthGs = .FALSE.
78 ENDIF
79 #endif /* ALLOW_ADAMSBASHFORTH_3 */
80
81 C- Initialize AB starting flags for T & S:
82 C notes: those could be modified when reading a pickup that does
83 C correspond to what is actually needed.
84 tempStartAB = nIter0.EQ.0
85 saltStartAB = nIter0.EQ.0
86
87 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
88 C Set up the two character io labels for GAD
89 CALL GAD_MAKE_DLABEL_LIST( GAD_iolabel,
90 & GAD_iolabel_nmax )
91
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 _BARRIER
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( AdamsBashforthGt, INDEX_NONE,
125 & 'AdamsBashforthGt =',
126 & ' /* apply Adams-Bashforth extrapolation on Gt */')
127 CALL WRITE_0D_L( AdamsBashforth_T, INDEX_NONE,
128 & 'AdamsBashforth_T =',
129 & ' /* apply Adams-Bashforth extrapolation on Temp */')
130
131 CALL WRITE_0D_I( saltAdvScheme, INDEX_NONE,
132 & 'saltAdvScheme =',
133 & ' /* Salt. Horiz.advection scheme selector */')
134 CALL WRITE_0D_I( saltVertAdvScheme, INDEX_NONE,
135 & 'saltVertAdvScheme =',
136 & ' /* Salt. Vert. Advection scheme selector */')
137 CALL WRITE_0D_L( saltMultiDimAdvec, INDEX_NONE,
138 & 'saltMultiDimAdvec =',
139 & ' /* use Muti-Dim Advec method for Salt */')
140 CALL WRITE_0D_L( AdamsBashforthGs, INDEX_NONE,
141 & 'AdamsBashforthGs =',
142 & ' /* apply Adams-Bashforth extrapolation on Gs */')
143 CALL WRITE_0D_L( AdamsBashforth_S, INDEX_NONE,
144 & 'AdamsBashforth_S =',
145 & ' /* apply Adams-Bashforth extrapolation on Salt */')
146
147 WRITE(msgBuf,'(A)') '// ==================================='
148 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
149
150 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
151
152 C-- Check size of the overlap :
153 IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
154 C- multi-dim-advection on CS-grid requires to double the size of Olx,Oly
155 minOlSize = 2
156 IF ( tempMultiDimAdvec ) THEN
157 IF ( tempAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
158 & tempAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
159 & tempAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
160 ENDIF
161 IF ( saltMultiDimAdvec ) THEN
162 IF ( saltAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
163 & saltAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
164 & saltAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
165 ENDIF
166 IF ( Olx.LT.minOlSize .OR. Oly.LT.minOlSize ) THEN
167 WRITE(msgBuf,'(A)')
168 & 'GAD_INIT: Multi-Dim Advection with 5-points stencil'
169 CALL PRINT_ERROR( msgBuf , myThid)
170 WRITE(msgBuf,'(A,I2)')
171 & 'GAD_INIT: advection scheme needs at least Olx,Oly=',
172 & minOlSize
173 CALL PRINT_ERROR( msgBuf , myThid)
174 STOP 'ABNORMAL END: S/R GAD_INIT'
175 ENDIF
176 ENDIF
177
178 _END_MASTER(myThid)
179 _BARRIER
180
181 RETURN
182 END

  ViewVC Help
Powered by ViewVC 1.1.22