-
Notifications
You must be signed in to change notification settings - Fork 237
/
GAD.h
168 lines (137 loc) · 5.67 KB
/
GAD.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
CBOP
C !ROUTINE: GAD.h
C !INTERFACE:
C #include "GAD.h"
C !DESCRIPTION:
C Contains enumerated constants for distinguishing between different
C advection schemes and tracers.
C
C Unfortunately, there is no easy way to make use of the
C tokens in namelist input so for now we have to enter the
C tokens value into "data" (ie. 2 for 2nd order etc.)
C !USES:
C !DEFINED PARAMETERS:
C ENUM_UPWIND_1RST :: 1rst Order Upwind
INTEGER ENUM_UPWIND_1RST
PARAMETER(ENUM_UPWIND_1RST=1)
C ENUM_CENTERED_2ND :: Centered 2nd order
INTEGER ENUM_CENTERED_2ND
PARAMETER(ENUM_CENTERED_2ND=2)
C ENUM_UPWIND_3RD :: 3rd order upwind
INTEGER ENUM_UPWIND_3RD
PARAMETER(ENUM_UPWIND_3RD=3)
C ENUM_CENTERED_4TH :: Centered 4th order
INTEGER ENUM_CENTERED_4TH
PARAMETER(ENUM_CENTERED_4TH=4)
C ENUM_DST2 :: 2nd Order Direct Space and Time (= Lax-Wendroff)
INTEGER ENUM_DST2
PARAMETER(ENUM_DST2=20)
C ENUM_FLUX_LIMIT :: Non-linear flux limiter
INTEGER ENUM_FLUX_LIMIT
PARAMETER(ENUM_FLUX_LIMIT=77)
C ENUM_DST3 :: 3rd Order Direst Space and Time
INTEGER ENUM_DST3
PARAMETER(ENUM_DST3=30)
C ENUM_DST3_FLUX_LIMIT :: 3-DST flux limited
INTEGER ENUM_DST3_FLUX_LIMIT
PARAMETER(ENUM_DST3_FLUX_LIMIT=33)
C ENUM_OS7MP :: 7th Order One Step method with Monotonicity Preserving Limiter
INTEGER ENUM_OS7MP
PARAMETER(ENUM_OS7MP=7)
C ENUM_SOM_PRATHER :: 2nd Order-Moment Advection Scheme, Prather, 1986
INTEGER ENUM_SOM_PRATHER
PARAMETER(ENUM_SOM_PRATHER=80)
C ENUM_SOM_LIMITER :: 2nd Order-Moment Advection Scheme, Prather Limiter
INTEGER ENUM_SOM_LIMITER
PARAMETER(ENUM_SOM_LIMITER=81)
C ENUM_PPM_NULL :: piecewise parabolic method with "null" limiter
INTEGER ENUM_PPM_NULL_LIMIT
PARAMETER(ENUM_PPM_NULL_LIMIT=40)
C ENUM_PPM_MONO :: piecewise parabolic method with "mono" limiter
INTEGER ENUM_PPM_MONO_LIMIT
PARAMETER(ENUM_PPM_MONO_LIMIT=41)
C ENUM_PPM_WENO :: piecewise parabolic method with "weno" limiter
INTEGER ENUM_PPM_WENO_LIMIT
PARAMETER(ENUM_PPM_WENO_LIMIT=42)
C ENUM_PQM_NULL :: piecewise quartic method with "null" limiter
INTEGER ENUM_PQM_NULL_LIMIT
PARAMETER(ENUM_PQM_NULL_LIMIT=50)
C ENUM_PQM_MONO :: piecewise quartic method with "mono" limiter
INTEGER ENUM_PQM_MONO_LIMIT
PARAMETER(ENUM_PQM_MONO_LIMIT=51)
C ENUM_PQM_WENO :: piecewise quartic method with "weno" limiter
INTEGER ENUM_PQM_WENO_LIMIT
PARAMETER(ENUM_PQM_WENO_LIMIT=52)
C GAD_Scheme_MaxNum :: maximum possible number for an advection scheme
INTEGER GAD_Scheme_MaxNum
PARAMETER( GAD_Scheme_MaxNum = 100 )
C nSOM :: number of 1rst & 2nd Order-Moments: 1+1 (1D), 2+3 (2D), 3+6 (3D)
INTEGER nSOM
PARAMETER( nSOM = 3+6 )
C oneSixth :: Third/fourth order interpolation factor
_RL oneSixth
PARAMETER(oneSixth=1.D0/6.D0)
C loop range for computing vertical advection tendency
C iMinAdvR,iMaxAdvR :: 1rst index (X-dir) loop range for vertical advection
C jMinAdvR,jMaxAdvR :: 2nd index (Y-dir) loop range for vertical advection
INTEGER iMinAdvR, iMaxAdvR, jMinAdvR, jMaxAdvR
c PARAMETER ( iMinAdvR = 1-OLx , iMaxAdvR = sNx+OLx )
c PARAMETER ( jMinAdvR = 1-OLy , jMaxAdvR = sNy+OLy )
C- note: we use to compute vertical advection tracer tendency everywhere
C (overlap included) as above, but really needs valid tracer tendency
C in interior only (as below):
PARAMETER ( iMinAdvR = 1 , iMaxAdvR = sNx )
PARAMETER ( jMinAdvR = 1 , jMaxAdvR = sNy )
C Differentiate between tracers (needed for KPP - arrgh!!!)
cph and GMRedi arrgh*arrgh!!!)
cph indices are used for TAF key computations, so need to
cph running from 1, 2, ...
c
C GAD_TEMPERATURE :: temperature
INTEGER GAD_TEMPERATURE
PARAMETER(GAD_TEMPERATURE=1)
C GAD_SALINITY :: salinity
INTEGER GAD_SALINITY
PARAMETER(GAD_SALINITY=2)
C GAD_TR1 :: passive tracer 1
INTEGER GAD_TR1
PARAMETER(GAD_TR1=3)
CEOP
C-- COMMON /GAD_PARM_C/ Character parameters for GAD pkg routines
C somSfx :: 1rst & 2nd Order moment suffix
CHARACTER*2 somSfx(nSOM)
COMMON /GAD_PARM_C/
& somSfx
C-- COMMON /GAD_PARM_I/ Integer parameters for GAD pkg routines
C GAD_OlMinSize :: overlap minimum size for GAD routines
C 1: min required; 2: to add to current min; 3: factor to apply
INTEGER GAD_OlMinSize(3)
COMMON /GAD_PARM_I/
& GAD_OlMinSize
C-- COMMON /GAD_PARM_L/ Logical parameters for GAD pkg routines
C tempSOM_Advection :: set to T if using 2nd-Order Moment advection for Temp
C saltSOM_Advection :: set to T if using 2nd-Order Moment advection for Salt
C tempMultiDimAdvec :: set to T if using multi-dim advection for Temp
C saltMultiDimAdvec :: set to T if using multi-dim advection for Salt
C AdamsBashforthGt :: apply Adams-Bashforth extrapolation on T tendency (=Gt)
C AdamsBashforthGs :: apply Adams-Bashforth extrapolation on S tendency (=Gs)
C AdamsBashforth_T :: apply Adams-Bashforth extrapolation on Pot.Temp.
C AdamsBashforth_S :: apply Adams-Bashforth extrapolation on Salinity
LOGICAL tempSOM_Advection
LOGICAL saltSOM_Advection
LOGICAL tempMultiDimAdvec
LOGICAL saltMultiDimAdvec
LOGICAL AdamsBashforthGt
LOGICAL AdamsBashforthGs
LOGICAL AdamsBashforth_T
LOGICAL AdamsBashforth_S
COMMON /GAD_PARM_L/
& tempSOM_Advection, saltSOM_Advection,
& tempMultiDimAdvec, saltMultiDimAdvec,
& AdamsBashforthGt, AdamsBashforthGs,
& AdamsBashforth_T, AdamsBashforth_S
_RL SmolarkiewiczMaxFrac
COMMON /GAD_SMOL/ SmolarkiewiczMaxFrac
CEH3 ;;; Local Variables: ***
CEH3 ;;; mode:fortran ***
CEH3 ;;; End: ***