28 |
#include "SIZE.h" |
#include "SIZE.h" |
29 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
30 |
#include "PARAMS.h" |
#include "PARAMS.h" |
31 |
|
#include "EOS.h" |
32 |
#include "GRID.h" |
#include "GRID.h" |
33 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
34 |
|
|
51 |
INTEGER bi, bj |
INTEGER bi, bj |
52 |
_RL xcoord(Nx) |
_RL xcoord(Nx) |
53 |
_RL ycoord(Ny) |
_RL ycoord(Ny) |
54 |
_RL rcoord(Nr) |
_RL rcoord(Nr+1) |
55 |
INTEGER coordLine |
INTEGER coordLine |
56 |
INTEGER tileLine |
INTEGER tileLine |
57 |
CEOP |
CEOP |
82 |
WRITE(msgBuf,'(A)') '// ' |
WRITE(msgBuf,'(A)') '// ' |
83 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
84 |
& SQUEEZE_RIGHT , 1) |
& SQUEEZE_RIGHT , 1) |
85 |
|
WRITE(msgBuf,'(A,A40)') 'buoyancyRelation = ', buoyancyRelation |
86 |
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
87 |
|
& SQUEEZE_RIGHT , 1) |
88 |
CALL WRITE_1D_R8( tRef, Nr, INDEX_K,'tRef =', |
CALL WRITE_1D_R8( tRef, Nr, INDEX_K,'tRef =', |
89 |
&' /* Reference temperature profile ( oC or oK ) */') |
&' /* Reference temperature profile ( oC or oK ) */') |
90 |
CALL WRITE_1D_R8( sRef, Nr, INDEX_K,'sRef =', |
CALL WRITE_1D_R8( sRef, Nr, INDEX_K,'sRef =', |
121 |
&' /* Laplacian diffusion of salt vertically ( m^2/s ) */') |
&' /* Laplacian diffusion of salt vertically ( m^2/s ) */') |
122 |
CALL WRITE_0D_R8( diffKrS, INDEX_NONE,'diffKrS =', |
CALL WRITE_0D_R8( diffKrS, INDEX_NONE,'diffKrS =', |
123 |
&' /* Laplacian diffusion of salt vertically ( m^2/s ) */') |
&' /* Laplacian diffusion of salt vertically ( m^2/s ) */') |
124 |
|
WRITE(msgBuf,'(2A)') ' Equation of State : eosType = ', eosType |
125 |
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
126 |
|
& SQUEEZE_RIGHT , 1) |
127 |
CALL WRITE_0D_R8( tAlpha, INDEX_NONE,'tAlpha =', |
CALL WRITE_0D_R8( tAlpha, INDEX_NONE,'tAlpha =', |
128 |
&' /* Linear EOS thermal expansion coefficient ( 1/degree ) */') |
&' /* Linear EOS thermal expansion coefficient ( 1/degree ) */') |
129 |
CALL WRITE_0D_R8( sBeta, INDEX_NONE,'sBeta =', |
CALL WRITE_0D_R8( sBeta, INDEX_NONE,'sBeta =', |
138 |
& SQUEEZE_RIGHT , 1) |
& SQUEEZE_RIGHT , 1) |
139 |
ENDDO |
ENDDO |
140 |
ENDIF |
ENDIF |
141 |
|
IF ( buoyancyRelation .eq. 'ATMOSPHERIC' ) THEN |
142 |
|
CALL WRITE_0D_R8( atm_Rd, INDEX_NONE, 'atm_Rd =', |
143 |
|
& ' /* gas constant for dry air ( J/kg/K ) */') |
144 |
|
CALL WRITE_0D_R8( atm_Cp, INDEX_NONE, 'atm_Cp =', |
145 |
|
& ' /* specific heat (Cp) of dry air ( J/kg/K ) */') |
146 |
|
CALL WRITE_0D_R8( atm_kappa, INDEX_NONE, 'atm_kappa =', |
147 |
|
& ' /* kappa (=Rd/Cp ) of dry air */') |
148 |
|
CALL WRITE_0D_R8( atm_Po, INDEX_NONE, 'atm_Po =', |
149 |
|
& ' /* standard reference pressure ( Pa ) */') |
150 |
|
CALL WRITE_0D_I( integr_GeoPot, INDEX_NONE, 'integr_GeoPot =', |
151 |
|
& ' /* select how the geopotential is integrated */') |
152 |
|
CALL WRITE_0D_I( selectFindRoSurf, INDEX_NONE, |
153 |
|
& 'selectFindRoSurf=', |
154 |
|
& ' /* select how Surf.Ref. pressure is defined */') |
155 |
|
ENDIF |
156 |
CALL WRITE_0D_R8( rhonil, INDEX_NONE,'rhonil =', |
CALL WRITE_0D_R8( rhonil, INDEX_NONE,'rhonil =', |
157 |
&' /* Reference density ( kg/m^3 ) */') |
&' /* Reference density ( kg/m^3 ) */') |
158 |
CALL WRITE_0D_R8( rhoConst, INDEX_NONE,'rhoConst =', |
CALL WRITE_0D_R8( rhoConst, INDEX_NONE,'rhoConst =', |
159 |
&' /* Reference density ( kg/m^3 ) */') |
&' /* Reference density ( kg/m^3 ) */') |
160 |
|
CALL WRITE_0D_R8( rhoConstFresh, INDEX_NONE,'rhoConstFresh =', |
161 |
|
&' /* Reference density ( kg/m^3 ) */') |
162 |
CALL WRITE_0D_R8( gravity, INDEX_NONE,'gravity =', |
CALL WRITE_0D_R8( gravity, INDEX_NONE,'gravity =', |
163 |
&' /* Gravitational acceleration ( m/s^2 ) */') |
&' /* Gravitational acceleration ( m/s^2 ) */') |
164 |
CALL WRITE_0D_R8( gBaro, INDEX_NONE,'gBaro =', |
CALL WRITE_0D_R8( gBaro, INDEX_NONE,'gBaro =', |
165 |
&' /* Barotropic gravity ( m/s^2 ) */') |
&' /* Barotropic gravity ( m/s^2 ) */') |
166 |
|
CALL WRITE_0D_R8(rotationPeriod,INDEX_NONE,'rotationPeriod =', |
167 |
|
&' /* Rotation Period ( s ) */') |
168 |
|
CALL WRITE_0D_R8( omega, INDEX_NONE,'omega =', |
169 |
|
&' /* Angular velocity ( rad/s ) */') |
170 |
CALL WRITE_0D_R8( f0, INDEX_NONE,'f0 =', |
CALL WRITE_0D_R8( f0, INDEX_NONE,'f0 =', |
171 |
&' /* Reference coriolis parameter ( 1/s ) */') |
&' /* Reference coriolis parameter ( 1/s ) */') |
172 |
CALL WRITE_0D_R8( beta, INDEX_NONE,'beta =', |
CALL WRITE_0D_R8( beta, INDEX_NONE,'beta =', |
173 |
&' /* Beta ( 1/(m.s) ) */') |
&' /* Beta ( 1/(m.s) ) */') |
174 |
|
|
175 |
CALL WRITE_0D_R8( freeSurfFac, INDEX_NONE,'freeSurfFac =', |
CALL WRITE_0D_R8( freeSurfFac, INDEX_NONE,'freeSurfFac =', |
176 |
&' /* Implicit free surface factor */') |
&' /* Implicit free surface factor */') |
177 |
CALL WRITE_0D_L( implicitFreeSurface, INDEX_NONE, |
CALL WRITE_0D_L( implicitFreeSurface, INDEX_NONE, |
186 |
CALL WRITE_0D_R8( implicDiv2Dflow, INDEX_NONE, |
CALL WRITE_0D_R8( implicDiv2Dflow, INDEX_NONE, |
187 |
&'implicDiv2Dflow =', |
&'implicDiv2Dflow =', |
188 |
&' /* Barot. Flow Div. implicit factor (0-1)*/') |
&' /* Barot. Flow Div. implicit factor (0-1)*/') |
189 |
|
CALL WRITE_0D_L( exactConserv, INDEX_NONE, |
190 |
|
&'exactConserv =', |
191 |
|
&' /* Exact Volume Conservation on/off flag*/') |
192 |
|
CALL WRITE_0D_L( uniformLin_PhiSurf, INDEX_NONE, |
193 |
|
&'uniformLin_PhiSurf =', |
194 |
|
&' /* use uniform Bo_surf on/off flag*/') |
195 |
|
CALL WRITE_0D_I( nonlinFreeSurf, INDEX_NONE, |
196 |
|
&'nonlinFreeSurf =', |
197 |
|
&' /* Non-linear Free Surf. options (-1,0,1,2,3)*/') |
198 |
|
WRITE(msgBuf,'(2A)') ' -1,0= Off ; 1,2,3= On,', |
199 |
|
& ' 2=+rescale gU,gV, 3=+update cg2d solv.' |
200 |
|
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
201 |
|
& SQUEEZE_RIGHT , 1) |
202 |
|
CALL WRITE_0D_R8( hFacInf, INDEX_NONE, |
203 |
|
&'hFacInf =', |
204 |
|
&' /* lower threshold for hFac (nonlinFreeSurf only)*/') |
205 |
|
CALL WRITE_0D_R8( hFacSup, INDEX_NONE, |
206 |
|
&'hFacSup =', |
207 |
|
&' /* upper threshold for hFac (nonlinFreeSurf only)*/') |
208 |
|
CALL WRITE_0D_I( select_rStar, INDEX_NONE, |
209 |
|
&'select_rStar =', |
210 |
|
&' /* r* Coordinate options (not yet implemented)*/') |
211 |
|
CALL WRITE_0D_L( useRealFreshWaterFlux, INDEX_NONE, |
212 |
|
&'useRealFreshWaterFlux =', |
213 |
|
&' /* Real Fresh Water Flux on/off flag*/') |
214 |
|
IF (useRealFreshWaterFlux .AND. nonlinFreeSurf.GT.0) THEN |
215 |
|
CALL WRITE_0D_R8( temp_EvPrRn, INDEX_NONE, |
216 |
|
&'temp_EvPrRn =', |
217 |
|
&' /* Temp. of Evap/Prec/R (UNSET=use local T)(oC)*/') |
218 |
|
CALL WRITE_0D_R8( salt_EvPrRn, INDEX_NONE, |
219 |
|
&'salt_EvPrRn =', |
220 |
|
&' /* Salin. of Evap/Prec/R (UNSET=use local S)(ppt)*/') |
221 |
|
CALL WRITE_0D_R8( trac_EvPrRn, INDEX_NONE, |
222 |
|
&'trac_EvPrRn =', |
223 |
|
&' /* Tracer in Evap/Prec/R (UNSET=use local Tr)*/') |
224 |
|
ELSE |
225 |
|
CALL WRITE_0D_R8( convertFW2Salt, INDEX_NONE, |
226 |
|
&'convertFW2Salt =', |
227 |
|
&' /* convert F.W. Flux to Salt Flux (-1=use local S)(ppt)*/') |
228 |
|
ENDIF |
229 |
|
|
230 |
|
CALL WRITE_0D_L( multiDimAdvection, INDEX_NONE, |
231 |
|
& 'multiDimAdvection =', |
232 |
|
&' /* enable/disable Multi-Dim Advection */') |
233 |
CALL WRITE_0D_L( staggerTimeStep, INDEX_NONE, |
CALL WRITE_0D_L( staggerTimeStep, INDEX_NONE, |
234 |
& 'staggerTimeStep =', |
& 'staggerTimeStep =', |
235 |
&' /* Stagger time stepping on/off flag */') |
&' /* Stagger time stepping on/off flag */') |
248 |
& ' /* Momentum pressure term on/off flag */') |
& ' /* Momentum pressure term on/off flag */') |
249 |
CALL WRITE_0D_L( tempStepping, INDEX_NONE, |
CALL WRITE_0D_L( tempStepping, INDEX_NONE, |
250 |
& 'tempStepping =', ' /* Temperature equation on/off flag */') |
& 'tempStepping =', ' /* Temperature equation on/off flag */') |
251 |
|
CALL WRITE_0D_L( tempAdvection, INDEX_NONE, |
252 |
|
& 'tempAdvection=', ' /* Temperature advection on/off flag */') |
253 |
|
CALL WRITE_0D_L( tempForcing, INDEX_NONE, |
254 |
|
& 'tempForcing =', ' /* Temperature forcing on/off flag */') |
255 |
|
CALL WRITE_0D_L( saltStepping, INDEX_NONE, |
256 |
|
& 'saltStepping =', ' /* Salinity equation on/off flag */') |
257 |
|
CALL WRITE_0D_L( saltAdvection, INDEX_NONE, |
258 |
|
& 'saltAdvection=', ' /* Salinity advection on/off flag */') |
259 |
|
CALL WRITE_0D_L( saltForcing, INDEX_NONE, |
260 |
|
& 'saltForcing =', ' /* Salinity forcing on/off flag */') |
261 |
CALL WRITE_0D_L( nonHydrostatic, INDEX_NONE, |
CALL WRITE_0D_L( nonHydrostatic, INDEX_NONE, |
262 |
& 'nonHydrostatic =', ' /* Non-Hydrostatic on/off flag */') |
& 'nonHydrostatic =', ' /* Non-Hydrostatic on/off flag */') |
263 |
|
CALL WRITE_0D_L( useCDscheme, INDEX_NONE, |
264 |
|
& 'useCDscheme =', ' /* CD scheme on/off flag */') |
265 |
|
CALL WRITE_0D_L( useJamartWetPoints, INDEX_NONE, |
266 |
|
& 'useJamartWetPoints=',' /* Coriolis WetPoints method flag */') |
267 |
WRITE(msgBuf,'(A)') '// ' |
WRITE(msgBuf,'(A)') '// ' |
268 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
269 |
& SQUEEZE_RIGHT , 1) |
& SQUEEZE_RIGHT , 1) |
299 |
&' /* Number of timesteps */') |
&' /* Number of timesteps */') |
300 |
CALL WRITE_0D_R8( deltaTmom, INDEX_NONE,'deltatTmom =', |
CALL WRITE_0D_R8( deltaTmom, INDEX_NONE,'deltatTmom =', |
301 |
&' /* Momentum equation timestep ( s ) */') |
&' /* Momentum equation timestep ( s ) */') |
302 |
|
CALL WRITE_0D_R8( deltaTfreesurf,INDEX_NONE,'deltaTfreesurf =', |
303 |
|
&' /* FreeSurface equation timestep ( s ) */') |
304 |
CALL WRITE_0D_R8( deltaTtracer, INDEX_NONE,'deltatTtracer =', |
CALL WRITE_0D_R8( deltaTtracer, INDEX_NONE,'deltatTtracer =', |
305 |
&' /* Tracer equation timestep ( s ) */') |
&' /* Tracer equation timestep ( s ) */') |
306 |
CALL WRITE_0D_R8( deltaTClock, INDEX_NONE,'deltatTClock =', |
CALL WRITE_0D_R8( deltaTClock, INDEX_NONE,'deltatTClock =', |
307 |
&' /* Model clock timestep ( s ) */') |
&' /* Model clock timestep ( s ) */') |
308 |
CALL WRITE_0D_R8( cAdjFreq, INDEX_NONE,'cAdjFreq =', |
CALL WRITE_0D_R8( cAdjFreq, INDEX_NONE,'cAdjFreq =', |
309 |
&' /* Convective adjustment interval ( s ) */') |
&' /* Convective adjustment interval ( s ) */') |
310 |
|
CALL WRITE_0D_L( forcing_In_AB,INDEX_NONE,'forcing_In_AB =', |
311 |
|
&' /* put T,S Forcing in Adams-Bash. stepping */') |
312 |
CALL WRITE_0D_R8( abeps, INDEX_NONE,'abeps =', |
CALL WRITE_0D_R8( abeps, INDEX_NONE,'abeps =', |
313 |
&' /* Adams-Bashforth stabilizing weight */') |
&' /* Adams-Bashforth stabilizing weight */') |
314 |
|
IF (useCDscheme) THEN |
315 |
CALL WRITE_0D_R8( tauCD, INDEX_NONE,'tauCD =', |
CALL WRITE_0D_R8( tauCD, INDEX_NONE,'tauCD =', |
316 |
&' /* CD coupling time-scale ( s ) */') |
&' /* CD coupling time-scale ( s ) */') |
317 |
CALL WRITE_0D_R8( rCD, INDEX_NONE,'rCD =', |
CALL WRITE_0D_R8( rCD, INDEX_NONE,'rCD =', |
318 |
&' /* Normalised CD coupling parameter */') |
&' /* Normalised CD coupling parameter */') |
319 |
|
ENDIF |
320 |
CALL WRITE_0D_R8( startTime, INDEX_NONE,'startTime =', |
CALL WRITE_0D_R8( startTime, INDEX_NONE,'startTime =', |
321 |
&' /* Run start time ( s ). */') |
&' /* Run start time ( s ). */') |
322 |
CALL WRITE_0D_R8( endTime, INDEX_NONE,'endTime =', |
CALL WRITE_0D_R8( endTime, INDEX_NONE,'endTime =', |
346 |
&' /* Spherical coordinates flag ( True / False ) */') |
&' /* Spherical coordinates flag ( True / False ) */') |
347 |
CALL WRITE_0D_L( groundAtK1, INDEX_NONE, 'groundAtK1 =', |
CALL WRITE_0D_L( groundAtK1, INDEX_NONE, 'groundAtK1 =', |
348 |
&' /* Lower Boundary (ground) at the surface(k=1) ( T / F ) */') |
&' /* Lower Boundary (ground) at the surface(k=1) ( T / F ) */') |
349 |
CALL WRITE_1D_R8( Ro_SeaLevel,1, INDEX_NONE,'Ro_SeaLevel =', |
CALL WRITE_0D_R8( Ro_SeaLevel, INDEX_NONE,'Ro_SeaLevel =', |
350 |
&' /* r(1) ( units of r ) */') |
&' /* r(1) ( units of r ) */') |
351 |
CALL WRITE_1D_R8( rkFac,1, INDEX_NONE,'rkFac =', |
CALL WRITE_0D_R8( rkFac, INDEX_NONE,'rkFac =', |
352 |
&' /* minus Vertical index orientation */') |
&' /* minus Vertical index orientation */') |
353 |
CALL WRITE_1D_R8( horiVertRatio,1, INDEX_NONE,'horiVertRatio =', |
CALL WRITE_0D_R8( horiVertRatio, INDEX_NONE,'horiVertRatio =', |
354 |
&' /* Ratio on units : Horiz - Vertical */') |
&' /* Ratio on units : Horiz - Vertical */') |
355 |
CALL WRITE_1D_R8( delZ,Nr, INDEX_K,'delZ = ', |
c CALL WRITE_1D_R8( delZ,Nr, INDEX_K,'delZ = ', |
356 |
&' /* W spacing ( m ) */') |
c &' /* W spacing ( m ) */') |
357 |
CALL WRITE_1D_R8( delP,Nr, INDEX_K,'delP = ', |
c CALL WRITE_1D_R8( delP,Nr, INDEX_K,'delP = ', |
358 |
&' /* W spacing ( Pa ) */') |
c &' /* W spacing ( Pa ) */') |
359 |
CALL WRITE_1D_R8( delR,Nr, INDEX_K,'delR = ', |
c CALL WRITE_1D_R8( delR,Nr, INDEX_K,'delR = ', |
360 |
|
c &' /* W spacing ( units of r ) */') |
361 |
|
CALL WRITE_1D_R8( drC,Nr, INDEX_K,'drC = ', |
362 |
|
&' /* C spacing ( units of r ) */') |
363 |
|
CALL WRITE_1D_R8( drF,Nr, INDEX_K,'drF = ', |
364 |
&' /* W spacing ( units of r ) */') |
&' /* W spacing ( units of r ) */') |
365 |
CALL WRITE_1D_R8( delX, Nx, INDEX_I,'delX = ', |
CALL WRITE_1D_R8( delX, Nx, INDEX_I,'delX = ', |
366 |
&' /* U spacing ( m - cartesian, degrees - spherical ) */') |
&' /* U spacing ( m - cartesian, degrees - spherical ) */') |
391 |
ENDDO |
ENDDO |
392 |
CALL WRITE_1D_R8( rcoord, Nr, INDEX_K,'rcoord = ', |
CALL WRITE_1D_R8( rcoord, Nr, INDEX_K,'rcoord = ', |
393 |
&' /* P-point R coordinate ( units of r ) */') |
&' /* P-point R coordinate ( units of r ) */') |
394 |
|
DO K=1,Nr+1 |
395 |
|
rcoord(K) = rF(K) |
396 |
|
ENDDO |
397 |
|
CALL WRITE_1D_R8( rcoord, Nr+1, INDEX_K,'rF = ', |
398 |
|
&' /* W-Interf. R coordinate ( units of r ) */') |
399 |
|
|
400 |
C Grid along selected grid lines |
C Grid along selected grid lines |
401 |
coordLine = 1 |
coordLine = 1 |