/[MITgcm]/MITgcm/pkg/aim_v23/phy_driver.F
ViewVC logotype

Contents of /MITgcm/pkg/aim_v23/phy_driver.F

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


Revision 1.8 - (show annotations) (download)
Thu Jan 21 00:10:04 2010 UTC (14 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62c, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62m, checkpoint62l, checkpoint62b
Changes since 1.7: +74 -43 lines
move local variables (not in common block) out of header files

1 C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/phy_driver.F,v 1.7 2006/01/26 00:18:54 jmc Exp $
2 C $Name: $
3
4 #include "AIM_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: PHY_DRIVER
8 C !INTERFACE:
9 SUBROUTINE PHY_DRIVER( tYear, usePkgDiag,
10 I bi, bj, myTime, myIter, myThid )
11
12
13 C !DESCRIPTION: \bv
14 C------------------------
15 C-- SUBROUTINE PHYDRIVER (tYear, myTime, bi, bj, myThid )
16 C-- Purpose: stand-alone driver for physical parametrization routines
17 C-- Input : TYEAR : fraction of year (0 = 1jan.00, 1 = 31dec.24)
18 C-- grid-point model fields in common block: PHYGR1
19 C-- forcing fields in common blocks : LSMASK, FORFIX, FORCIN
20 C-- Output : Diagnosed upper-air variables in common block: PHYGR2
21 C-- Diagnosed surface variables in common block: PHYGR3
22 C-- Physical param. tendencies in common block: PHYTEN
23 C-- Surface and upper boundary fluxes in common block: FLUXES
24 C-------
25 C Note: tendencies are not /dpFac here but later in AIM_AIM2DYN
26 C-------
27 C from SPEDDY code: (part of original code left with c_FM)
28 C * S/R PHYPAR : except interp. dynamical Var. from Spectral of grid point
29 C here dynamical var. are loaded within S/R AIM_DYN2AIM.
30 C * S/R FORDATE: only the CALL SOL_OZ (done once / day in SPEEDY)
31 C------------------------
32 C \ev
33
34 C !USES:
35 IMPLICIT NONE
36
37 C == Global variables ===
38
39 C-- size for MITgcm & Physics package :
40 #include "AIM_SIZE.h"
41 #include "EEPARAMS.h"
42
43 C-- Physics package
44 #include "AIM_PARAMS.h"
45 #include "AIM_GRID.h"
46
47 C Constants + functions of sigma and latitude
48 #include "com_physcon.h"
49
50 C Model variables, tendencies and fluxes on gaussian grid
51 #include "com_physvar.h"
52
53 C Surface forcing fields (time-inv. or functions of seasonal cycle)
54 #include "com_forcing.h"
55
56 C Constants for forcing fields:
57 #include "com_forcon.h"
58
59 C Radiation scheme variables
60 #include "com_radvar.h"
61
62 C Radiation constants
63 #include "com_radcon.h"
64
65 C Logical flags
66 c_FM include "com_lflags.h"
67
68 C !INPUT/OUTPUT PARAMETERS:
69 C == Routine arguments ==
70 C tYear :: Fraction into year
71 C usePkgDiag :: logical flag, true if using Diagnostics PKG
72 C bi, bj :: Tile index
73 C myTime :: Current time of simulation ( s )
74 C myIter :: Current iteration number in simulation
75 C myThid :: Number of this instance of the routine
76 _RL tYear
77 LOGICAL usePkgDiag
78 INTEGER bi,bj
79 _RL myTime
80 INTEGER myIter, myThid
81 CEOP
82
83 #ifdef ALLOW_AIM
84 C !FUNCTIONS:
85 C !LOCAL VARIABLES:
86 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
87 C-- Local Variables originally (Speedy) in common bloc (com_physvar.h):
88 C TG1 :: absolute temperature
89 C QG1 :: specific humidity (g/kg)
90 C VsurfSq :: Square of surface wind speed (grid position = as T,Q)
91 C SE :: dry static energy <- replaced by Pot.Temp.
92 C QSAT :: saturation specific humidity (g/kg)
93 C PSG :: surface pressure (normalized)
94 _RL TG1 (NGP,NLEV)
95 _RL QG1 (NGP,NLEV)
96 _RL VsurfSq(NGP)
97 _RL SE (NGP,NLEV)
98 _RL QSAT (NGP,NLEV)
99 _RL PSG (NGP)
100 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
101 C-- Local variables:
102 C kGrd :: Ground level index (2-dim)
103 C dpFac :: cell delta_P fraction (3-dim)
104 C dTskin :: temp. correction for daily-cycle heating [K]
105 C T1s :: near-surface air temperature (from Pot.Temp)
106 C DENVV :: surface flux (sens,lat.) coeff. (=Rho*|V|) [kg/m2/s]
107 C Shf0 :: sensible heat flux over freezing surf.
108 C dShf :: sensible heat flux derivative relative to surf. temp
109 C Evp0 :: evaporation computed over freezing surface (Ts=0.oC)
110 C dEvp :: evaporation derivative relative to surf. temp
111 C Slr0 :: upward long wave radiation over freezing surf.
112 C dSlr :: upward long wave rad. derivative relative to surf. temp
113 C sFlx :: net surface flux (+=down) function of surf. temp Ts:
114 C 0: Flux(Ts=0.oC) ; 1: Flux(Ts^n) ; 2: d.Flux/d.Ts(Ts^n)
115 LOGICAL LRADSW
116 INTEGER ICLTOP(NGP)
117 INTEGER kGround(NGP)
118 _RL dpFac(NGP,NLEV)
119 c_FM REAL RPS(NGP), ST4S(NGP)
120 _RL ST4S(NGP)
121 _RL PSG_1(NGP), RPS_1
122 _RL dTskin(NGP), T1s(NGP), DENVV(NGP)
123 _RL Shf0(NGP), dShf(NGP), Evp0(NGP), dEvp(NGP)
124 _RL Slr0(NGP), dSlr(NGP), sFlx(NGP,0:2)
125
126 INTEGER J, K
127
128 #ifdef ALLOW_CLR_SKY_DIAG
129 _RL dummyR(NGP)
130 INTEGER dummyI(NGP)
131 #endif
132 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
133
134 C-- 1. Compute grid-point fields
135
136 C- 1.1 Convert model spectral variables to grid-point variables
137
138 CALL AIM_DYN2AIM(
139 O TG1, QG1, SE, VsurfSq, PSG, dpFac, kGround,
140 I bi, bj, myTime, myIter, myThid )
141
142 C- 1.2 Compute thermodynamic variables
143
144 C- 1.2.a Surface pressure (ps), 1/ps and surface temperature
145 RPS_1 = 1. _d 0
146 DO J=1,NGP
147 PSG_1(J)=1. _d 0
148 c_FM PSG(J)=EXP(PSLG1(J))
149 c_FM RPS(J)=1./PSG(J)
150 ENDDO
151
152 C 1.2.b Dry static energy
153 C <= replaced by Pot.Temp in aim_dyn2aim
154 c DO K=1,NLEV
155 c DO J=1,NGP
156 c_FM SE(J,K)=CP*TG1(J,K)+PHIG1(J,K)
157 c ENDDO
158 c ENDDO
159
160 C 1.2.c Relative humidity and saturation spec. humidity
161
162 DO K=1,NLEV
163 c_FM CALL SHTORH (1,NGP,TG1(1,K),PSG,SIG(K),QG1(1,K),
164 c_FM & RH(1,K),QSAT(1,K))
165 CALL SHTORH (1,NGP,TG1(1,K),PSG_1,SIG(K),QG1(1,K),
166 O RH(1,K,myThid),QSAT(1,K),
167 I myThid)
168 ENDDO
169
170 C-- 2. Precipitation
171
172 C 2.1 Deep convection
173
174 c_FM CALL CONVMF (PSG,SE,QG1,QSAT,
175 c_FM & ICLTOP,CBMF,PRECNV,TT_CNV,QT_CNV)
176 CALL CONVMF (PSG,dpFac,SE,QG1,QSAT,
177 O ICLTOP,CBMF(1,myThid),PRECNV(1,myThid),
178 O TT_CNV(1,1,myThid),QT_CNV(1,1,myThid),
179 I kGround,bi,bj,myThid)
180
181 DO K=2,NLEV
182 DO J=1,NGP
183 TT_CNV(J,K,myThid)=TT_CNV(J,K,myThid)*RPS_1*GRDSCP(K)
184 QT_CNV(J,K,myThid)=QT_CNV(J,K,myThid)*RPS_1*GRDSIG(K)
185 ENDDO
186 ENDDO
187
188 C 2.2 Large-scale condensation
189
190 c_FM CALL LSCOND (PSG,QG1,QSAT,
191 c_FM & PRECLS,TT_LSC,QT_LSC)
192 CALL LSCOND (PSG,dpFac,QG1,QSAT,
193 O PRECLS(1,myThid),TT_LSC(1,1,myThid),
194 O QT_LSC(1,1,myThid),
195 I kGround,bi,bj,myThid)
196
197 IF ( aim_energPrecip ) THEN
198 C 2.3 Snow Precipitation (update TT_CNV & TT_LSC)
199 CALL SNOW_PRECIP (
200 I PSG, dpFac, SE, ICLTOP,
201 I PRECNV(1,myThid), QT_CNV(1,1,myThid),
202 I PRECLS(1,myThid), QT_LSC(1,1,myThid),
203 U TT_CNV(1,1,myThid), TT_LSC(1,1,myThid),
204 O EnPrec(1,myThid),
205 I kGround,bi,bj,myThid)
206 ELSE
207 DO J=1,NGP
208 EnPrec(J,myThid) = 0. _d 0
209 ENDDO
210 ENDIF
211
212 C-- 3. Radiation (shortwave and longwave) and surface fluxes
213
214 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
215 C --> from FORDATE (in SPEEDY) :
216
217 C 3.0 Compute Incomming shortwave rad. (from FORDATE in SPEEDY)
218
219 c_FM CALL SOL_OZ (SOLC,TYEAR)
220 CALL SOL_OZ (SOLC,tYear, snLat(1,myThid), csLat(1,myThid),
221 O FSOL, OZONE, OZUPP, ZENIT, STRATZ,
222 I bi,bj,myThid)
223
224 C <-- from FORDATE (in SPEEDY).
225 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
226
227 C 3.1 Compute shortwave tendencies and initialize lw transmissivity
228
229 C The sw radiation may be called at selected time steps
230 LRADSW = .TRUE.
231
232 IF (LRADSW) THEN
233
234 c_FM CALL RADSW (PSG,QG1,RH,ALB1,
235 c_FM & ICLTOP,CLOUDC,TSR,SSR,TT_RSW)
236 ICLTOP(1) = 1
237 CALL RADSW (PSG,dpFac,QG1,RH(1,1,myThid),ALB1(1,0,myThid),
238 I FSOL, OZONE, OZUPP, ZENIT, STRATZ,
239 O TAU2, STRATC,
240 O ICLTOP,CLOUDC(1,myThid),
241 O TSR(1,myThid),SSR(1,0,myThid),TT_RSW(1,1,myThid),
242 I kGround,bi,bj,myThid)
243
244 DO J=1,NGP
245 CLTOP(J,myThid)=SIGH(ICLTOP(J)-1)*PSG_1(J)
246 ENDDO
247
248 DO K=1,NLEV
249 DO J=1,NGP
250 TT_RSW(J,K,myThid)=TT_RSW(J,K,myThid)*RPS_1*GRDSCP(K)
251 ENDDO
252 ENDDO
253
254 ENDIF
255
256 C 3.2 Compute downward longwave fluxes
257
258 c_FM CALL RADLW (-1,TG1,TS,ST4S,
259 c_FM & OLR,SLR,TT_RLW)
260 CALL RADLW (-1,TG1,TS(1,myThid),ST4S,
261 & OZUPP, STRATC, TAU2, FLUX, ST4A,
262 O OLR(1,myThid),SLR(1,0,myThid),TT_RLW(1,1,myThid),
263 I kGround,bi,bj,myThid)
264
265 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
266 C 3.3. Compute surface fluxes and land skin temperature
267
268 c_FM CALL SUFLUX (PSG,UG1,VG1,TG1,QG1,RH,PHIG1,
269 c_FM & PHIS0,FMASK1,STL1,SST1,SOILW1,SSR,SLR,
270 c_FM & USTR,VSTR,SHF,EVAP,ST4S,
271 c_FM & TS,TSKIN,U0,V0,T0,Q0)
272 CALL SUFLUX_PREP(
273 I PSG, TG1, QG1, RH(1,1,myThid), SE, VsurfSq,
274 I WVSurf(1,myThid),csLat(1,myThid),fOrogr(1,myThid),
275 I FMASK1(1,1,myThid),STL1(1,myThid),SST1(1,myThid),
276 I sti1(1,myThid), SSR(1,0,myThid),
277 O SPEED0(1,myThid),DRAG(1,0,myThid),DENVV,
278 O dTskin,T1s,T0(1,myThid),Q0(1,myThid),
279 I kGround,bi,bj,myThid)
280
281 CALL SUFLUX_LAND (
282 I PSG, FMASK1(1,1,myThid), EMISFC,
283 I STL1(1,myThid), dTskin,
284 I SOILW1(1,myThid), SSR(1,1,myThid), SLR(1,0,myThid),
285 I T1s, T0(1,myThid), Q0(1,myThid), DENVV,
286 O SHF(1,1,myThid), EVAP(1,1,myThid), SLR(1,1,myThid),
287 O Shf0, dShf, Evp0, dEvp, Slr0, dSlr, sFlx,
288 O TS(1,myThid), TSKIN(1,myThid),
289 I bi,bj,myThid)
290 #ifdef ALLOW_LAND
291 CALL AIM_LAND_IMPL(
292 I FMASK1(1,1,myThid), dTskin,
293 I Shf0, dShf, Evp0, dEvp, Slr0, dSlr,
294 U sFlx, STL1(1,myThid),
295 U SHF(1,1,myThid), EVAP(1,1,myThid), SLR(1,1,myThid),
296 O dTsurf(1,1,myThid),
297 I bi, bj, myTime, myIter, myThid)
298 #endif /* ALLOW_LAND */
299
300 CALL SUFLUX_OCEAN(
301 I PSG, FMASK1(1,2,myThid),
302 I SST1(1,myThid),
303 I SSR(1,2,myThid), SLR(1,0,myThid),
304 O T1s, T0(1,myThid), Q0(1,myThid), DENVV,
305 O SHF(1,2,myThid), EVAP(1,2,myThid), SLR(1,2,myThid),
306 I bi,bj,myThid)
307
308 IF ( aim_splitSIOsFx ) THEN
309 CALL SUFLUX_SICE (
310 I PSG, FMASK1(1,3,myThid), EMISFC,
311 I STI1(1,myThid), dTskin,
312 I SSR(1,3,myThid), SLR(1,0,myThid),
313 I T1s, T0(1,myThid), Q0(1,myThid), DENVV,
314 O SHF(1,3,myThid), EVAP(1,3,myThid), SLR(1,3,myThid),
315 O Shf0, dShf, Evp0, dEvp, Slr0, dSlr, sFlx,
316 O TS(1,myThid), TSKIN(1,myThid),
317 I bi,bj,myThid)
318 #ifdef ALLOW_THSICE
319 CALL AIM_SICE_IMPL(
320 I FMASK1(1,3,myThid), SSR(1,3,myThid), sFlx,
321 I Shf0, dShf, Evp0, dEvp, Slr0, dSlr,
322 U STI1(1,myThid),
323 U SHF(1,3,myThid), EVAP(1,3,myThid), SLR(1,3,myThid),
324 O dTsurf(1,3,myThid),
325 I bi, bj, myTime, myIter, myThid)
326 #endif /* ALLOW_THSICE */
327 ELSE
328 DO J=1,NGP
329 SHF (J,3,myThid) = 0. _d 0
330 EVAP(J,3,myThid) = 0. _d 0
331 SLR (J,3,myThid) = 0. _d 0
332 ENDDO
333 ENDIF
334
335 CALL SUFLUX_POST(
336 I FMASK1(1,1,myThid), EMISFC,
337 I STL1(1,myThid), SST1(1,myThid), sti1(1,myThid),
338 I dTskin, SLR(1,0,myThid),
339 I T0(1,myThid), Q0(1,myThid), DENVV,
340 U DRAG(1,0,myThid), SHF(1,0,myThid),
341 U EVAP(1,0,myThid), SLR(1,1,myThid),
342 O ST4S, TS(1,myThid), TSKIN(1,myThid),
343 I bi,bj,myThid)
344
345 #ifdef ALLOW_DIAGNOSTICS
346 IF ( usePkgDiag ) THEN
347 CALL DIAGNOSTICS_FILL( SLR(1,0,myThid),
348 & 'DWNLWG ', 1, 1 , 3,bi,bj, myThid )
349 ENDIF
350 #endif
351 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
352
353 C 3.4 Compute upward longwave fluxes, convert them to tendencies
354 C and add shortwave tendencies
355
356 c_FM CALL RADLW (1,TG1,TS,ST4S,
357 c_FM & OLR,SLR,TT_RLW)
358 CALL RADLW (1,TG1,TS(1,myThid),ST4S,
359 & OZUPP, STRATC, TAU2, FLUX, ST4A,
360 O OLR(1,myThid),SLR(1,0,myThid),TT_RLW(1,1,myThid),
361 I kGround,bi,bj,myThid)
362
363 DO K=1,NLEV
364 DO J=1,NGP
365 TT_RLW(J,K,myThid)=TT_RLW(J,K,myThid)*RPS_1*GRDSCP(K)
366 c_FM TTEND (J,K)=TTEND(J,K)+TT_RSW(J,K)+TT_RLW(J,K)
367 ENDDO
368 ENDDO
369
370 #ifdef ALLOW_CLR_SKY_DIAG
371 C 3.5 Compute clear-sky radiation (for diagnostics only)
372 IF ( aim_clrSkyDiag ) THEN
373
374 C 3.5.1 Compute shortwave tendencies
375 dummyI(1) = -1
376 CALL RADSW (PSG,dpFac,QG1,RH(1,1,myThid),ALB1(1,0,myThid),
377 I FSOL, OZONE, OZUPP, ZENIT, STRATZ,
378 O TAU2, STRATC,
379 O dummyI, dummyR,
380 O TSWclr(1,myThid), SSWclr(1,myThid), TT_SWclr(1,1,myThid),
381 I kGround,bi,bj,myThid)
382
383 C 3.5.2 Compute downward longwave fluxes
384
385 CALL RADLW (-1,TG1,TS(1,myThid),ST4S,
386 & OZUPP, STRATC, TAU2, FLUX, ST4A,
387 O OLWclr(1,myThid), SLWclr(1,myThid), TT_LWclr(1,1,myThid),
388 I kGround,bi,bj,myThid)
389
390 C 3.5.3 Compute upward longwave fluxes, convert them to tendencies
391
392 CALL RADLW (1,TG1,TS(1,myThid),ST4S,
393 & OZUPP, STRATC, TAU2, FLUX, ST4A,
394 O OLWclr(1,myThid), SLWclr(1,myThid), TT_LWclr(1,1,myThid),
395 I kGround,bi,bj,myThid)
396
397 DO K=1,NLEV
398 DO J=1,NGP
399 TT_SWclr(J,K,myThid)=TT_SWclr(J,K,myThid)*RPS_1*GRDSCP(K)
400 TT_LWclr(J,K,myThid)=TT_LWclr(J,K,myThid)*RPS_1*GRDSCP(K)
401 ENDDO
402 ENDDO
403
404 ENDIF
405 #endif /* ALLOW_CLR_SKY_DIAG */
406
407 C-- 4. PBL interactions with lower troposphere
408
409 C 4.1 Vertical diffusion and shallow convection
410
411 c_FM CALL VDIFSC (UG1,VG1,SE,RH,QG1,QSAT,PHIG1,
412 c_FM & UT_PBL,VT_PBL,TT_PBL,QT_PBL)
413 CALL VDIFSC (dpFac, SE, RH(1,1,myThid), QG1, QSAT,
414 O TT_PBL(1,1,myThid),QT_PBL(1,1,myThid),
415 I kGround,bi,bj,myThid)
416
417 C 4.2 Add tendencies due to surface fluxes
418
419 DO J=1,NGP
420 c_FM UT_PBL(J,NLEV)=UT_PBL(J,NLEV)+USTR(J,3)*RPS(J)*GRDSIG(NLEV)
421 c_FM VT_PBL(J,NLEV)=VT_PBL(J,NLEV)+VSTR(J,3)*RPS(J)*GRDSIG(NLEV)
422 c_FM TT_PBL(J,NLEV)=TT_PBL(J,NLEV)+ SHF(J,3)*RPS(J)*GRDSCP(NLEV)
423 c_FM QT_PBL(J,NLEV)=QT_PBL(J,NLEV)+EVAP(J,3)*RPS(J)*GRDSIG(NLEV)
424 K = kGround(J)
425 IF ( K.GT.0 ) THEN
426 TT_PBL(J,K,myThid) = TT_PBL(J,K,myThid)
427 & + SHF(J,0,myThid) *RPS_1*GRDSCP(K)
428 QT_PBL(J,K,myThid) = QT_PBL(J,K,myThid)
429 & + EVAP(J,0,myThid)*RPS_1*GRDSIG(K)
430 ENDIF
431 ENDDO
432
433 c_FM DO K=1,NLEV
434 c_FM DO J=1,NGP
435 c_FM UTEND(J,K)=UTEND(J,K)+UT_PBL(J,K)
436 c_FM VTEND(J,K)=VTEND(J,K)+VT_PBL(J,K)
437 c_FM TTEND(J,K)=TTEND(J,K)+TT_PBL(J,K)
438 c_FM QTEND(J,K)=QTEND(J,K)+QT_PBL(J,K)
439 c_FM ENDDO
440 c_FM ENDDO
441
442 #endif /* ALLOW_AIM */
443
444 RETURN
445 END

  ViewVC Help
Powered by ViewVC 1.1.22