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

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

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


Revision 1.12 - (hide annotations) (download)
Wed Jan 10 23:51:35 2007 UTC (17 years, 5 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 jmc 1.12 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_init.F,v 1.11 2006/10/17 19:00:43 jmc Exp $
2 jmc 1.1 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 edhill 1.3 C !DESCRIPTION:
11     C Routine to initialize Generic Advection/Diffusion variables and
12     C constants.
13 jmc 1.1
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 jmc 1.8 INTEGER minOlSize
32 jmc 1.1
33     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
34    
35 jmc 1.11 _BEGIN_MASTER(myThid)
36    
37 jmc 1.5 C-- Set Temp & Salt multi-Dim Advec. flag according to advection scheme used
38 jmc 1.2 tempMultiDimAdvec = multiDimAdvection .AND. tempAdvection
39     saltMultiDimAdvec = multiDimAdvection .AND. saltAdvection
40 jmc 1.1 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
41     & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
42     & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
43 jmc 1.9 tempMultiDimAdvec = .FALSE.
44 jmc 1.1 ENDIF
45     IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
46     & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
47     & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
48 jmc 1.9 saltMultiDimAdvec = .FALSE.
49 jmc 1.1 ENDIF
50    
51 jmc 1.5 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 jmc 1.1 C-- Set Temp & Salt Adams-Bashforth flag according to advection scheme used
57 jmc 1.9 AdamsBashforthGt = .FALSE.
58     AdamsBashforthGs = .FALSE.
59     AdamsBashforth_T = .FALSE.
60     AdamsBashforth_S = .FALSE.
61 jmc 1.1 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
62     & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
63     & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
64 jmc 1.9 AdamsBashforthGt = tempStepping
65 jmc 1.1 ENDIF
66     IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
67     & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
68     & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
69 jmc 1.9 AdamsBashforthGs = saltStepping
70 jmc 1.1 ENDIF
71 jmc 1.9 #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 jmc 1.11 IF ( .NOT.doAB_onGtGs .AND.
75 jmc 1.10 & (staggerTimeStep .OR. implicitIntGravWave) ) THEN
76 jmc 1.9 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 jmc 1.1
89 jmc 1.11 _END_MASTER(myThid)
90    
91 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
92    
93 jmc 1.7 #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 jmc 1.1 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 jmc 1.9 & ' /* Temp. Horiz.Advection scheme selector */')
117 jmc 1.4 CALL WRITE_0D_I( tempVertAdvScheme, INDEX_NONE,
118     & 'tempVertAdvScheme =',
119 jmc 1.9 & ' /* Temp. Vert. Advection scheme selector */')
120 jmc 1.1 CALL WRITE_0D_L( tempMultiDimAdvec, INDEX_NONE,
121     & 'tempMultiDimAdvec =',
122     & ' /* use Muti-Dim Advec method for Temp */')
123 jmc 1.9 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 jmc 1.1
130     CALL WRITE_0D_I( saltAdvScheme, INDEX_NONE,
131     & 'saltAdvScheme =',
132 jmc 1.9 & ' /* Salt. Horiz.advection scheme selector */')
133 jmc 1.4 CALL WRITE_0D_I( saltVertAdvScheme, INDEX_NONE,
134     & 'saltVertAdvScheme =',
135 jmc 1.9 & ' /* Salt. Vert. Advection scheme selector */')
136 jmc 1.1 CALL WRITE_0D_L( saltMultiDimAdvec, INDEX_NONE,
137     & 'saltMultiDimAdvec =',
138     & ' /* use Muti-Dim Advec method for Salt */')
139 jmc 1.9 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 jmc 1.1
146     WRITE(msgBuf,'(A)') '// ==================================='
147     CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
148    
149 jmc 1.8 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 jmc 1.9 & 'GAD_INIT: advection scheme needs at least Olx,Oly=',
171 jmc 1.8 & minOlSize
172     CALL PRINT_ERROR( msgBuf , myThid)
173     STOP 'ABNORMAL END: S/R GAD_INIT'
174     ENDIF
175     ENDIF
176    
177 jmc 1.1 _END_MASTER(myThid)
178     _BARRIER
179    
180     RETURN
181     END

  ViewVC Help
Powered by ViewVC 1.1.22