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

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

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


Revision 1.19 - (hide annotations) (download)
Fri Apr 4 20:56:32 2014 UTC (10 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64w, checkpoint64v, checkpoint65, checkpoint65h, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e
Changes since 1.18: +2 -2 lines
- Replace ALLOW_AUTODIFF_TAMC by ALLOW_AUTODIFF (except for tape/storage
  which are specific to TAF/TAMC).

1 jmc 1.19 C $Header: /u/gcmpack/MITgcm/model/src/set_parms.F,v 1.18 2013/07/30 18:51:01 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4 jahn 1.5 #include "PACKAGES_CONFIG.h"
5 jmc 1.1 #include "CPP_OPTIONS.h"
6 jmc 1.17 #ifdef ALLOW_MOM_COMMON
7     # include "MOM_COMMON_OPTIONS.h"
8     #endif
9 jmc 1.1
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 jmc 1.4 #include "EOS.h"
27 jmc 1.17 #ifdef ALLOW_MOM_COMMON
28     # include "MOM_VISC.h"
29     #endif
30 jmc 1.1
31     C !INPUT/OUTPUT PARAMETERS:
32 jmc 1.6 C myThid :: My Thread Id number
33 jmc 1.1 INTEGER myThid
34    
35 jmc 1.7 C !FUNCTIONS:
36     c INTEGER ILNBLNK
37     c EXTERNAL ILNBLNK
38    
39 jmc 1.1 C !LOCAL VARIABLES:
40     CHARACTER*(MAX_LEN_MBUF) msgBuf
41 jmc 1.15 INTEGER k
42 jmc 1.7 _RL tmpVar
43 jmc 1.1 CEOP
44    
45 jmc 1.12 C-- Set (or reset) On/Off flags :
46 jmc 1.1
47 jmc 1.12 C- For off-line calculation, switch off Momentum and Active-tracers (=T,S):
48     #ifdef ALLOW_OFFLINE
49 jmc 1.1 IF ( useOffLine ) THEN
50 jmc 1.12 CALL OFFLINE_RESET_PARMS( myThid )
51 jmc 1.1 ENDIF
52 jmc 1.12 #endif /* ALLOW_OFFLINE */
53 jmc 1.1
54 jmc 1.12 _BEGIN_MASTER(myThid)
55 jmc 1.1
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 jmc 1.2 use3dCoriolis= useCoriolis .AND. use3dCoriolis
64 jmc 1.1 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 jmc 1.18 useSmag3D = momViscosity .AND. useSmag3D
70 jmc 1.1 use3Dsolver = nonHydrostatic.OR. implicitIntGravWave
71 jmc 1.10 calc_wVelocity = momStepping .OR. exactConserv
72 jmc 1.6
73 jmc 1.17 #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 jmc 1.6 C-- Free-surface & pressure method
125 jmc 1.13 uniformFreeSurfLev = usingZCoords
126 jmc 1.14 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 jmc 1.6 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 jmc 1.19 #ifdef ALLOW_AUTODIFF
140 jmc 1.11 doResetHFactors = .TRUE.
141     #endif
142     #ifndef NONLIN_FRSURF
143     doResetHFactors = .FALSE.
144     #endif
145 jmc 1.16
146 jmc 1.3 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 jmc 1.6 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
157     & SQUEEZE_RIGHT, myThid )
158 jmc 1.3 ENDIF
159 jmc 1.1 C-- Momentum viscosity on/off flag.
160     IF ( momViscosity ) THEN
161 jmc 1.6 vfFacMom = 1. _d 0
162 jmc 1.1 ELSE
163 jmc 1.6 vfFacMom = 0. _d 0
164 jmc 1.1 ENDIF
165     C-- Momentum advection on/off flag.
166     IF ( momAdvection ) THEN
167 jmc 1.6 afFacMom = 1. _d 0
168 jmc 1.1 ELSE
169 jmc 1.6 afFacMom = 0. _d 0
170 jmc 1.1 ENDIF
171     C-- Momentum forcing on/off flag.
172     IF ( momForcing ) THEN
173 jmc 1.6 foFacMom = 1. _d 0
174 jmc 1.1 ELSE
175 jmc 1.6 foFacMom = 0. _d 0
176 jmc 1.1 ENDIF
177     C-- Coriolis term on/off flag.
178     IF ( useCoriolis ) THEN
179 jmc 1.6 cfFacMom = 1. _d 0
180 jmc 1.1 ELSE
181 jmc 1.6 cfFacMom = 0. _d 0
182 jmc 1.1 ENDIF
183     C-- Pressure term on/off flag.
184     IF ( momPressureForcing ) THEN
185 jmc 1.6 pfFacMom = 1. _d 0
186 jmc 1.1 ELSE
187 jmc 1.6 pfFacMom = 0. _d 0
188 jmc 1.1 ENDIF
189     C-- Metric terms on/off flag.
190     IF ( metricTerms ) THEN
191 jmc 1.6 mTFacMom = 1. _d 0
192 jmc 1.1 ELSE
193 jmc 1.6 mTFacMom = 0. _d 0
194 jmc 1.1 ENDIF
195    
196     C-- Advection and Forcing for Temp and salt on/off flags
197 jmc 1.15 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 jmc 1.1 tempAdvection = tempStepping .AND. tempAdvection
204 jmc 1.15 tempVertDiff4 = tempStepping .AND. tempVertDiff4
205 jmc 1.1 tempForcing = tempStepping .AND. tempForcing
206     saltAdvection = saltStepping .AND. saltAdvection
207 jmc 1.15 saltVertDiff4 = saltStepping .AND. saltVertDiff4
208 jmc 1.1 saltForcing = saltStepping .AND. saltForcing
209     tempImplVertAdv = tempAdvection .AND. tempImplVertAdv
210     saltImplVertAdv = saltAdvection .AND. saltImplVertAdv
211 jmc 1.9 doThetaClimRelax = tempForcing .AND.
212     & ( tauThetaClimRelax.GT.0. _d 0 )
213     doSaltClimRelax = saltForcing .AND.
214     & ( tauSaltClimRelax .GT.0. _d 0 )
215 jmc 1.1
216 jmc 1.4 C-- Dynamically Active Tracers : set flags
217     tempIsActiveTr = momPressureForcing .AND. tempAdvection
218     saltIsActiveTr = momPressureForcing .AND. saltAdvection
219 jmc 1.16 IF ( eosType.EQ.'IDEALG' .AND. atm_Rq.EQ.0. ) THEN
220 jmc 1.4 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 jmc 1.1 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 mlosch 1.8 & eosType .EQ. 'MDJWF' .OR.
233     & eosType .EQ. 'TEOS10' ) )
234 jmc 1.1
235 jmc 1.7 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 jahn 1.5 #ifdef ALLOW_LONGSTEP
259     IF ( usePTRACERS ) THEN
260     CALL LONGSTEP_CHECK_ITERS(myThid)
261     ENDIF
262     #endif /* ALLOW_LONGSTEP */
263    
264 jmc 1.1 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