/[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.10 - (hide annotations) (download)
Thu Feb 23 16:32:22 2006 UTC (18 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint58e_post, checkpoint58b_post, checkpoint58m_post, checkpoint58g_post, checkpoint58n_post, checkpoint58h_post, checkpoint58j_post, checkpoint58f_post, checkpoint58d_post, checkpoint58i_post, checkpoint58o_post, checkpoint58c_post, checkpoint58k_post, checkpoint58p_post
Changes since 1.9: +3 -2 lines
allow also to select AB(T,S) if implicitIntGravWave

1 jmc 1.10 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_init.F,v 1.9 2005/11/06 22:14:02 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.5 C-- Set Temp & Salt multi-Dim Advec. flag according to advection scheme used
36 jmc 1.2 tempMultiDimAdvec = multiDimAdvection .AND. tempAdvection
37     saltMultiDimAdvec = multiDimAdvection .AND. saltAdvection
38 jmc 1.1 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
39     & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
40     & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
41 jmc 1.9 tempMultiDimAdvec = .FALSE.
42 jmc 1.1 ENDIF
43     IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
44     & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
45     & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
46 jmc 1.9 saltMultiDimAdvec = .FALSE.
47 jmc 1.1 ENDIF
48    
49 jmc 1.5 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 jmc 1.1 C-- Set Temp & Salt Adams-Bashforth flag according to advection scheme used
55 jmc 1.9 AdamsBashforthGt = .FALSE.
56     AdamsBashforthGs = .FALSE.
57     AdamsBashforth_T = .FALSE.
58     AdamsBashforth_S = .FALSE.
59 jmc 1.1 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
60     & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
61     & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
62 jmc 1.9 AdamsBashforthGt = tempStepping
63 jmc 1.1 ENDIF
64     IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
65     & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
66     & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
67 jmc 1.9 AdamsBashforthGs = saltStepping
68 jmc 1.1 ENDIF
69 jmc 1.9 #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 jmc 1.10 IF ( .NOT.doAB_onGtGs .AND.
73     & (staggerTimeStep .OR. implicitIntGravWave) ) THEN
74 jmc 1.9 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 jmc 1.1
87     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
88    
89 jmc 1.7 #ifdef ALLOW_DIAGNOSTICS
90     IF ( useDiagnostics ) THEN
91     C-- Add diagnostics of Temp & Salt fluxes to the (long) list of diagnostics:
92     CALL GAD_DIAGNOSTICS_INIT( myThid )
93     ENDIF
94     #endif /* ALLOW_DIAGNOSTICS */
95    
96     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
97    
98 jmc 1.1 C-- Print out GAD parameters :
99     _BARRIER
100     _BEGIN_MASTER(myThid)
101    
102     WRITE(msgBuf,'(A)') ' '
103     CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
104     WRITE(msgBuf,'(A)') '// ==================================='
105     CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
106     WRITE(msgBuf,'(A)')'// GAD parameters :'
107     CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
108     WRITE(msgBuf,'(A)') '// ==================================='
109     CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
110    
111     CALL WRITE_0D_I( tempAdvScheme, INDEX_NONE,
112     & 'tempAdvScheme =',
113 jmc 1.9 & ' /* Temp. Horiz.Advection scheme selector */')
114 jmc 1.4 CALL WRITE_0D_I( tempVertAdvScheme, INDEX_NONE,
115     & 'tempVertAdvScheme =',
116 jmc 1.9 & ' /* Temp. Vert. Advection scheme selector */')
117 jmc 1.1 CALL WRITE_0D_L( tempMultiDimAdvec, INDEX_NONE,
118     & 'tempMultiDimAdvec =',
119     & ' /* use Muti-Dim Advec method for Temp */')
120 jmc 1.9 CALL WRITE_0D_L( AdamsBashforthGt, INDEX_NONE,
121     & 'AdamsBashforthGt =',
122     & ' /* apply Adams-Bashforth extrapolation on Gt */')
123     CALL WRITE_0D_L( AdamsBashforth_T, INDEX_NONE,
124     & 'AdamsBashforth_T =',
125     & ' /* apply Adams-Bashforth extrapolation on Temp */')
126 jmc 1.1
127     CALL WRITE_0D_I( saltAdvScheme, INDEX_NONE,
128     & 'saltAdvScheme =',
129 jmc 1.9 & ' /* Salt. Horiz.advection scheme selector */')
130 jmc 1.4 CALL WRITE_0D_I( saltVertAdvScheme, INDEX_NONE,
131     & 'saltVertAdvScheme =',
132 jmc 1.9 & ' /* Salt. Vert. Advection scheme selector */')
133 jmc 1.1 CALL WRITE_0D_L( saltMultiDimAdvec, INDEX_NONE,
134     & 'saltMultiDimAdvec =',
135     & ' /* use Muti-Dim Advec method for Salt */')
136 jmc 1.9 CALL WRITE_0D_L( AdamsBashforthGs, INDEX_NONE,
137     & 'AdamsBashforthGs =',
138     & ' /* apply Adams-Bashforth extrapolation on Gs */')
139     CALL WRITE_0D_L( AdamsBashforth_S, INDEX_NONE,
140     & 'AdamsBashforth_S =',
141     & ' /* apply Adams-Bashforth extrapolation on Salt */')
142 jmc 1.1
143     WRITE(msgBuf,'(A)') '// ==================================='
144     CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
145    
146 jmc 1.8 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
147    
148     C-- Check size of the overlap :
149     IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
150     C- multi-dim-advection on CS-grid requires to double the size of Olx,Oly
151     minOlSize = 2
152     IF ( tempMultiDimAdvec ) THEN
153     IF ( tempAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
154     & tempAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
155     & tempAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
156     ENDIF
157     IF ( saltMultiDimAdvec ) THEN
158     IF ( saltAdvScheme.EQ.ENUM_FLUX_LIMIT .OR.
159     & saltAdvScheme.EQ.ENUM_DST3_FLUX_LIMIT .OR.
160     & saltAdvScheme.EQ.ENUM_DST3 ) minOlSize = 4
161     ENDIF
162     IF ( Olx.LT.minOlSize .OR. Oly.LT.minOlSize ) THEN
163     WRITE(msgBuf,'(A)')
164     & 'GAD_INIT: Multi-Dim Advection with 5-points stencil'
165     CALL PRINT_ERROR( msgBuf , myThid)
166     WRITE(msgBuf,'(A,I2)')
167 jmc 1.9 & 'GAD_INIT: advection scheme needs at least Olx,Oly=',
168 jmc 1.8 & minOlSize
169     CALL PRINT_ERROR( msgBuf , myThid)
170     STOP 'ABNORMAL END: S/R GAD_INIT'
171     ENDIF
172     ENDIF
173    
174 jmc 1.1 _END_MASTER(myThid)
175     _BARRIER
176    
177     RETURN
178     END

  ViewVC Help
Powered by ViewVC 1.1.22