/[MITgcm]/MITgcm/model/src/set_parms.F
ViewVC logotype

Contents of /MITgcm/model/src/set_parms.F

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


Revision 1.18 - (show annotations) (download)
Tue Jul 30 18:51:01 2013 UTC (10 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n
Changes since 1.17: +2 -1 lines
add run-time parameters for isotropic 3-D Smagorinsky (Smag3D)

1 C $Header: /u/gcmpack/MITgcm/model/src/set_parms.F,v 1.17 2013/07/28 21:08:27 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6 #ifdef ALLOW_MOM_COMMON
7 # include "MOM_COMMON_OPTIONS.h"
8 #endif
9
10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
11 CBOP
12 C !ROUTINE: SET_PARMS
13 C !INTERFACE:
14 SUBROUTINE SET_PARMS( myThid )
15
16 C !DESCRIPTION:
17 C Set model "parameters" that might depend on the use of some pkgs;
18 C called from INITIALISE_FIXED, after INI_PARMS & PACKAGES_READPARAMS
19 C NOTES: After leaving this S/R, parameters will not change anymore.
20
21 C !USES:
22 IMPLICIT NONE
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "EOS.h"
27 #ifdef ALLOW_MOM_COMMON
28 # include "MOM_VISC.h"
29 #endif
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C myThid :: My Thread Id number
33 INTEGER myThid
34
35 C !FUNCTIONS:
36 c INTEGER ILNBLNK
37 c EXTERNAL ILNBLNK
38
39 C !LOCAL VARIABLES:
40 CHARACTER*(MAX_LEN_MBUF) msgBuf
41 INTEGER k
42 _RL tmpVar
43 CEOP
44
45 C-- Set (or reset) On/Off flags :
46
47 C- For off-line calculation, switch off Momentum and Active-tracers (=T,S):
48 #ifdef ALLOW_OFFLINE
49 IF ( useOffLine ) THEN
50 CALL OFFLINE_RESET_PARMS( myThid )
51 ENDIF
52 #endif /* ALLOW_OFFLINE */
53
54 _BEGIN_MASTER(myThid)
55
56 C-- On/Off flags for each terms of the momentum equation
57 nonHydrostatic = momStepping .AND. nonHydrostatic
58 quasiHydrostatic = momStepping .AND. quasiHydrostatic
59 momAdvection = momStepping .AND. momAdvection
60 momViscosity = momStepping .AND. momViscosity
61 momForcing = momStepping .AND. momForcing
62 useCoriolis = momStepping .AND. useCoriolis
63 use3dCoriolis= useCoriolis .AND. use3dCoriolis
64 useCDscheme = momStepping .AND. useCDscheme
65 momPressureForcing= momStepping .AND. momPressureForcing
66 implicitIntGravWave=momPressureForcing .AND. implicitIntGravWave
67 momImplVertAdv = momAdvection .AND. momImplVertAdv
68 implicitViscosity= momViscosity .AND. implicitViscosity
69 useSmag3D = momViscosity .AND. useSmag3D
70 use3Dsolver = nonHydrostatic.OR. implicitIntGravWave
71 calc_wVelocity = momStepping .OR. exactConserv
72
73 #ifndef ALLOW_3D_VISCAH
74 IF ( viscAhDfile.NE.' ' .OR. viscAhZfile.NE.' ' ) THEN
75 WRITE(msgBuf,'(2A)') 'SET_PARAMS: ',
76 & 'viscAhDfile and viscAhZfile cannot be used with'
77 CALL PRINT_ERROR( msgBuf, myThid )
78 WRITE(msgBuf,'(2A)') 'SET_PARAMS: ',
79 & '"#undef ALLOW_3D_VISCAH" in MOM_COMMON_OPTIONS.h'
80 CALL PRINT_ERROR( msgBuf, myThid )
81 STOP 'ABNORMAL END: S/R SET_PARAMS'
82 c errCount = errCount + 1
83 ENDIF
84 #endif
85 #ifndef ALLOW_3D_VISCA4
86 IF ( viscA4Dfile.NE.' ' .OR. viscA4Zfile.NE.' ' ) THEN
87 WRITE(msgBuf,'(2A)') 'SET_PARAMS: ',
88 & 'viscA4Dfile and viscA4Zfile cannot be used with'
89 CALL PRINT_ERROR( msgBuf, myThid )
90 WRITE(msgBuf,'(2A)') 'SET_PARAMS: ',
91 & '"#undef ALLOW_3D_VISCA4" in MOM_COMMON_OPTIONS.h'
92 CALL PRINT_ERROR( msgBuf, myThid )
93 STOP 'ABNORMAL END: S/R SET_PARAMS'
94 ENDIF
95 #endif
96
97 #ifdef ALLOW_MOM_COMMON
98 C- On/Off flags for viscosity coefficients
99 useVariableVisc =
100 & viscAhGrid .NE.zeroRL .OR. viscA4Grid .NE.zeroRL
101 & .OR. viscC2smag .NE.zeroRL .OR. viscC4smag .NE.zeroRL
102 & .OR. viscC2leith.NE.zeroRL .OR. viscC2leithD.NE.zeroRL
103 & .OR. viscC4leith.NE.zeroRL .OR. viscC4leithD.NE.zeroRL
104 & .OR. viscAhDfile.NE.' ' .OR. viscAhZfile.NE.' '
105 & .OR. viscA4Dfile.NE.' ' .OR. viscA4Zfile.NE.' '
106
107 useHarmonicVisc = viscAh .NE.zeroRL
108 & .OR. viscAhD .NE.zeroRL .OR. viscAhZ .NE.zeroRL
109 & .OR. viscAhGrid .NE.zeroRL .OR. viscC2smag .NE.zeroRL
110 & .OR. viscC2leith.NE.zeroRL .OR. viscC2leithD.NE.zeroRL
111 & .OR. viscAhDfile.NE. ' ' .OR. viscAhZfile .NE. ' '
112
113 useBiharmonicVisc = viscA4.NE.zeroRL
114 & .OR. viscA4D .NE.zeroRL .OR. viscA4Z .NE.zeroRL
115 & .OR. viscA4Grid .NE.zeroRL .OR. viscC4smag .NE.zeroRL
116 & .OR. viscC4leith.NE.zeroRL .OR. viscC4leithD.NE.zeroRL
117 & .OR. viscA4Dfile.NE. ' ' .OR. viscA4Zfile .NE. ' '
118
119 useVariableVisc = momViscosity .AND. useVariableVisc
120 useHarmonicVisc = momViscosity .AND. useHarmonicVisc
121 useBiharmonicVisc = momViscosity .AND. useBiharmonicVisc
122 #endif /* ALLOW_MOM_COMMON */
123
124 C-- Free-surface & pressure method
125 uniformFreeSurfLev = usingZCoords
126 C- Note: comment line below to revert to full-cell hydrostatic-pressure
127 C calculation in surface grid-cell below ice-shelf
128 uniformFreeSurfLev = usingZCoords .AND. .NOT.useShelfIce
129 IF ( selectNHfreeSurf.NE.0 .AND.
130 & ( .NOT.nonHydrostatic .OR. usingPCoords
131 & .OR. .NOT.exactConserv
132 & ) ) THEN
133 WRITE(msgBuf,'(2A)') '** WARNING ** SET_PARMS: ',
134 & 'reset selectNHfreeSurf to zero'
135 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
136 & SQUEEZE_RIGHT, myThid )
137 selectNHfreeSurf = 0
138 ENDIF
139 #ifdef ALLOW_AUTODIFF_TAMC
140 doResetHFactors = .TRUE.
141 #endif
142 #ifndef NONLIN_FRSURF
143 doResetHFactors = .FALSE.
144 #endif
145
146 C-- Set default Vorticity-Term Scheme:
147 IF ( vectorInvariantMomentum ) THEN
148 IF ( selectVortScheme.EQ.UNSET_I ) THEN
149 selectVortScheme = 1
150 IF ( upwindVorticity ) selectVortScheme = 0
151 IF ( highOrderVorticity ) selectVortScheme = 0
152 ENDIF
153 ELSEIF ( selectVortScheme.NE.UNSET_I ) THEN
154 WRITE(msgBuf,'(A,A)') '** WARNING ** SET_PARMS: ',
155 & 'Vector-Invariant Momentum unused => ignore selectVortScheme'
156 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
157 & SQUEEZE_RIGHT, myThid )
158 ENDIF
159 C-- Momentum viscosity on/off flag.
160 IF ( momViscosity ) THEN
161 vfFacMom = 1. _d 0
162 ELSE
163 vfFacMom = 0. _d 0
164 ENDIF
165 C-- Momentum advection on/off flag.
166 IF ( momAdvection ) THEN
167 afFacMom = 1. _d 0
168 ELSE
169 afFacMom = 0. _d 0
170 ENDIF
171 C-- Momentum forcing on/off flag.
172 IF ( momForcing ) THEN
173 foFacMom = 1. _d 0
174 ELSE
175 foFacMom = 0. _d 0
176 ENDIF
177 C-- Coriolis term on/off flag.
178 IF ( useCoriolis ) THEN
179 cfFacMom = 1. _d 0
180 ELSE
181 cfFacMom = 0. _d 0
182 ENDIF
183 C-- Pressure term on/off flag.
184 IF ( momPressureForcing ) THEN
185 pfFacMom = 1. _d 0
186 ELSE
187 pfFacMom = 0. _d 0
188 ENDIF
189 C-- Metric terms on/off flag.
190 IF ( metricTerms ) THEN
191 mTFacMom = 1. _d 0
192 ELSE
193 mTFacMom = 0. _d 0
194 ENDIF
195
196 C-- Advection and Forcing for Temp and salt on/off flags
197 tempVertDiff4 = .FALSE.
198 saltVertDiff4 = .FALSE.
199 DO k=1,Nr
200 tempVertDiff4 = tempVertDiff4 .OR. ( diffKr4T(k).GT.0. _d 0 )
201 saltVertDiff4 = saltVertDiff4 .OR. ( diffKr4S(k).GT.0. _d 0 )
202 ENDDO
203 tempAdvection = tempStepping .AND. tempAdvection
204 tempVertDiff4 = tempStepping .AND. tempVertDiff4
205 tempForcing = tempStepping .AND. tempForcing
206 saltAdvection = saltStepping .AND. saltAdvection
207 saltVertDiff4 = saltStepping .AND. saltVertDiff4
208 saltForcing = saltStepping .AND. saltForcing
209 tempImplVertAdv = tempAdvection .AND. tempImplVertAdv
210 saltImplVertAdv = saltAdvection .AND. saltImplVertAdv
211 doThetaClimRelax = tempForcing .AND.
212 & ( tauThetaClimRelax.GT.0. _d 0 )
213 doSaltClimRelax = saltForcing .AND.
214 & ( tauSaltClimRelax .GT.0. _d 0 )
215
216 C-- Dynamically Active Tracers : set flags
217 tempIsActiveTr = momPressureForcing .AND. tempAdvection
218 saltIsActiveTr = momPressureForcing .AND. saltAdvection
219 IF ( eosType.EQ.'IDEALG' .AND. atm_Rq.EQ.0. ) THEN
220 saltIsActiveTr = .FALSE.
221 ELSEIF ( eosType.EQ.'LINEAR' ) THEN
222 IF ( tAlpha.EQ.0. ) tempIsActiveTr = .FALSE.
223 IF ( sBeta .EQ.0. ) saltIsActiveTr = .FALSE.
224 ENDIF
225
226 C-- When using the dynamical pressure in EOS (with Z-coord.),
227 C needs to activate specific part of the code (restart & exchange)
228 c useDynP_inEos_Zc = .FALSE.
229 useDynP_inEos_Zc = ( fluidIsWater .AND. usingZCoords
230 & .AND. ( eosType .EQ. 'JMD95P' .OR.
231 & eosType .EQ. 'UNESCO' .OR.
232 & eosType .EQ. 'MDJWF' .OR.
233 & eosType .EQ. 'TEOS10' ) )
234
235 C-- Adjust parameters related to length of the simulation
236
237 C- Need to adjust endTime for sub-timestep mismatch , since in
238 C several places, test for last iteration with time==endTime :
239 tmpVar = startTime + deltaTClock*FLOAT(nTimeSteps)
240 IF ( endTime.NE.tmpVar ) THEN
241 IF ( ABS(endTime-tmpVar).GT.deltaTClock*1. _d -6 ) THEN
242 WRITE(msgBuf,'(A,A)') '** WARNING ** SET_PARMS: ',
243 & '(endTime-baseTime) not multiple of time-step'
244 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
245 & SQUEEZE_RIGHT, myThid )
246 WRITE(msgBuf,'(2A,1PE20.13)') '** WARNING ** SET_PARMS: ',
247 & 'Previous endTime=', endTime
248 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
249 & SQUEEZE_RIGHT, myThid )
250 WRITE(msgBuf,'(2A,1PE20.13)') '** WARNING ** SET_PARMS: ',
251 & 'Adjusted endTime=', tmpVar
252 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
253 & SQUEEZE_RIGHT, myThid )
254 ENDIF
255 endTime = tmpVar
256 ENDIF
257
258 #ifdef ALLOW_LONGSTEP
259 IF ( usePTRACERS ) THEN
260 CALL LONGSTEP_CHECK_ITERS(myThid)
261 ENDIF
262 #endif /* ALLOW_LONGSTEP */
263
264 C-- After this point, main model parameters are not supposed to be modified.
265 WRITE(msgBuf,'(A,A)') 'SET_PARMS: done'
266 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
267 & SQUEEZE_RIGHT , 1)
268
269 _END_MASTER(myThid)
270
271 C-- Everyone else must wait for the parameters to be set
272 _BARRIER
273
274 RETURN
275 END

  ViewVC Help
Powered by ViewVC 1.1.22