2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "AIM_OPTIONS.h" |
#include "AIM_OPTIONS.h" |
|
#undef OLD_AIM_GRIG_MAPPING |
|
5 |
|
|
6 |
SUBROUTINE AIM_DO_ATMOS_PHYSICS( phi_hyd, |
SUBROUTINE AIM_DO_ATMOS_PHYSICS( phi_hyd, |
7 |
I bi, bj, |
I bi, bj, |
90 |
SAVE mnthNam |
SAVE mnthNam |
91 |
REAL hInitial(Nr) |
REAL hInitial(Nr) |
92 |
REAL hInitialW(Nr) |
REAL hInitialW(Nr) |
93 |
DATA hInitial / 418.038,2038.54,5296.88,10090.02,17338.0/ |
DATA hInitial / 17338.0,10090.02,5296.88,2038.54,418.038/ |
94 |
SAVE hInitial |
SAVE hInitial |
95 |
DATA hInitialW / 0., 1657.54, 4087.75, 8050.96,15090.4 / |
DATA hInitialW / 15090.4, 8050.96, 4087.75, 1657.54, 0. / |
96 |
REAL pSurfs(Nr) |
REAL pSurfs(Nr) |
97 |
DATA pSurfs / 950.D2,775.D2, 500.D2, 250.D2, 75.D2 / |
DATA pSurfs / 75.D2, 250.D2, 500.D2, 775.D2, 950.D2 / |
98 |
SAVE pSurfs |
SAVE pSurfs |
99 |
REAL pSurfw(Nr) |
REAL pSurfw(Nr) |
100 |
DATA pSurfw /1000.D2, 900.D2, 650.D2, 350.D2, 150.D2 / |
DATA pSurfw / 150.D2, 350.D2, 650.D2, 900.D2, 1000.D2 / |
101 |
SAVE pSurfw |
SAVE pSurfw |
102 |
REAL RD |
REAL RD |
103 |
REAL CPAIR |
REAL CPAIR |
168 |
C ptotalniv5=phiTSum/phiTCount |
C ptotalniv5=phiTSum/phiTCount |
169 |
ptotalniv5=0. |
ptotalniv5=0. |
170 |
|
|
171 |
|
#ifndef OLD_AIM_INTERFACE |
172 |
c_jmc: Because AIM physics LSC is not applied in the stratosphere (top level), |
c_jmc: Because AIM physics LSC is not applied in the stratosphere (top level), |
173 |
c ==> move water wapor from the stratos to the surface level. |
c ==> move water wapor from the stratos to the surface level. |
174 |
DO J = 1-Oly, sNy+Oly |
DO J = 1-Oly, sNy+Oly |
175 |
DO I = 1-Olx, sNx+Olx |
DO I = 1-Olx, sNx+Olx |
176 |
c k = k_surf(i,j,bi,bj) |
k = ksurfC(i,j,bi,bj) |
177 |
c salt(I,J,k,bi,bj) = salt(I,J,k,bi,bj) |
IF (k.LE.Nr) |
178 |
c & + maskC(i,j,Nr,bi,bj)*salt(I,J,Nr,bi,bj)*drF(Nr)*recip_drF(k) |
& salt(I,J,k,bi,bj) = salt(I,J,k,bi,bj) |
179 |
|
& + salt(I,J,Nr,bi,bj)*drF(Nr)*recip_drF(k) |
180 |
salt(I,J,Nr,bi,bj) = 0. |
salt(I,J,Nr,bi,bj) = 0. |
181 |
ENDDO |
ENDDO |
182 |
ENDDO |
ENDDO |
183 |
|
#endif /* OLD_AIM_INTERFACE */ |
184 |
|
|
185 |
C Note the mapping here is only valid for one tile per proc. |
C Note the mapping here is only valid for one tile per proc. |
186 |
DO K = 1, Nr |
DO K = 1, Nr |
188 |
DO I = 1, sNx |
DO I = 1, sNx |
189 |
I2 = (sNx)*(J-1)+I |
I2 = (sNx)*(J-1)+I |
190 |
Katm = _KD2KA( K ) |
Katm = _KD2KA( K ) |
191 |
UG1(I2,Katm,myThid) = |
C - to reproduce old results (coupled run, summer 2000) : |
192 |
& 0.5*(uVel(I,J,K,bi,bj)+uVel(I+1,J,K,bi,bj)) |
UG1(I2,Katm,myThid) = uVel(I,J,K,bi,bj) |
193 |
VG1(I2,Katm,myThid) = |
VG1(I2,Katm,myThid) = vVel(I,J,K,bi,bj) |
|
& 0.5*(vVel(I,J,K,bi,bj)+vVel(I,J+1,K,bi,bj)) |
|
194 |
C Physics works with temperature - not potential temp. |
C Physics works with temperature - not potential temp. |
195 |
TG1(I2,Katm,myThid) = theta(I,J,K,bi,bj) |
TG1(I2,Katm,myThid) = theta(I,J,K,bi,bj) |
196 |
& / ((pGround/pSurfs(K))**(RD/CPAIR)) |
& / ((pGround/pSurfs(Katm))**(RD/CPAIR)) |
197 |
c_jmc QG1(I2,Katm,myThid) = salt(I,J,K,bi,bj) |
#ifdef OLD_AIM_INTERFACE |
198 |
|
QG1(I2,Katm,myThid) = salt(I,J,K,bi,bj) |
199 |
|
#else |
200 |
QG1(I2,Katm,myThid) = MAX(salt(I,J,K,bi,bj), 0. _d 0) |
QG1(I2,Katm,myThid) = MAX(salt(I,J,K,bi,bj), 0. _d 0) |
201 |
|
#endif |
202 |
PHIG1(I2,Katm,myThid) = (phiTotal(I,J,K)- ptotalniv5 ) |
PHIG1(I2,Katm,myThid) = (phiTotal(I,J,K)- ptotalniv5 ) |
203 |
& + gravity*Hinitial(k) |
& + gravity*Hinitial(Katm) |
204 |
C *NOTE* Fix me for lopped cells <== done ! |
C *NOTE* Fix me for lopped cells <== done ! |
205 |
IF (maskC(i,j,k,bi,bj).EQ.1.) THEN |
IF (maskC(i,j,k,bi,bj).EQ.1.) THEN |
206 |
RHOG1(I2,Katm) = pSurfs(K)/RD/TG1(I2,Katm,myThid) |
RHOG1(I2,Katm) = pSurfs(Katm)/RD/TG1(I2,Katm,myThid) |
207 |
ELSE |
ELSE |
208 |
RHOG1(I2,Katm)=0. |
RHOG1(I2,Katm)=0. |
209 |
ENDIF |
ENDIF |
216 |
DO J = 1, sNy |
DO J = 1, sNy |
217 |
DO I = 1, sNx |
DO I = 1, sNx |
218 |
I2 = I+(J-1)*sNx |
I2 = I+(J-1)*sNx |
219 |
|
#ifdef OLD_AIM_INTERFACE |
220 |
|
C - to reproduce old results (coupled run, summer 2000) : |
221 |
|
Vsurfsq(I2,myThid) = 0. |
222 |
|
IF (NLEVxyU(I2,myThid).GT.0) |
223 |
|
& Vsurfsq(I2,myThid) = Vsurfsq(I2,myThid) |
224 |
|
& +UG1(I2,NLEVxyU(I2,myThid),myThid) |
225 |
|
& *UG1(I2,NLEVxyU(I2,myThid),myThid) |
226 |
|
IF (NLEVxyV(I2,myThid).GT.0) |
227 |
|
& Vsurfsq(I2,myThid) = Vsurfsq(I2,myThid) |
228 |
|
& +VG1(I2,NLEVxyV(I2,myThid),myThid) |
229 |
|
& *VG1(I2,NLEVxyV(I2,myThid),myThid) |
230 |
|
#else /* OLD_AIM_INTERFACE */ |
231 |
K = ksurfC(i,j,bi,bj) |
K = ksurfC(i,j,bi,bj) |
232 |
IF (K.LE.Nr) THEN |
IF (K.LE.Nr) THEN |
233 |
Vsurfsq(I2,myThid) = 0.5 * ( |
Vsurfsq(I2,myThid) = 0.5 * ( |
236 |
& + vVel(I,J,K,bi,bj)*vVel(I,J,K,bi,bj) |
& + vVel(I,J,K,bi,bj)*vVel(I,J,K,bi,bj) |
237 |
& + vVel(I,J+1,K,bi,bj)*vVel(I,J+1,K,bi,bj) |
& + vVel(I,J+1,K,bi,bj)*vVel(I,J+1,K,bi,bj) |
238 |
& ) |
& ) |
|
#ifdef OLD_AIM_GRIG_MAPPING |
|
|
c - to reproduce old results : |
|
|
Katm = _KD2KA( K ) |
|
|
Vsurfsq(I2,myThid) = |
|
|
& UG1(I2,Katm,myThid)*UG1(I2,Katm,myThid) |
|
|
& + VG1(I2,Katm,myThid)*VG1(I2,Katm,myThid) |
|
|
#endif /* OLD_AIM_GRIG_MAPPING */ |
|
239 |
ELSE |
ELSE |
240 |
Vsurfsq(I2,myThid) = 0. |
Vsurfsq(I2,myThid) = 0. |
241 |
ENDIF |
ENDIF |
242 |
|
#endif /* OLD_AIM_INTERFACE */ |
243 |
ENDDO |
ENDDO |
244 |
ENDDO |
ENDDO |
245 |
c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
268 |
PNLEVW(I2,myThid) = PsurfW(Nlevxy(I2,myThid))/pGround |
PNLEVW(I2,myThid) = PsurfW(Nlevxy(I2,myThid))/pGround |
269 |
ELSE |
ELSE |
270 |
C Dummy value for land |
C Dummy value for land |
271 |
PNLEVW(I2,myThid) = PsurfW(1)/pGround |
PNLEVW(I2,myThid) = PsurfW(Nr)/pGround |
272 |
ENDIF |
ENDIF |
273 |
PSLG1(I2,myThid) = 0. |
PSLG1(I2,myThid) = 0. |
274 |
ENDDO |
ENDDO |
283 |
|
|
284 |
C |
C |
285 |
C Load external data needed by physics package |
C Load external data needed by physics package |
286 |
C 1. Albedo |
C 1. Albedo (between 0-1) |
287 |
C 2. Soil moisture |
C 2. Soil moisture (between 0-1) |
288 |
C 3. Surface temperatures |
C 3. Surface temperatures (in situ Temp. [K]) |
289 |
C 4. Snow depth - assume no snow for now |
C 4. Snow depth - assume no snow for now |
290 |
C 5. Sea ice - assume no sea ice for now |
C 5. Sea ice - assume no sea ice for now |
291 |
C 6. Land sea mask - infer from exact zeros in soil moisture dataset |
C 6. Land sea mask - infer from exact zeros in soil moisture dataset |
310 |
DO I=1,sNx |
DO I=1,sNx |
311 |
I2 = (sNx)*(J-1)+I |
I2 = (sNx)*(J-1)+I |
312 |
alb0(I2,myThid) = 0. |
alb0(I2,myThid) = 0. |
313 |
alb0(I2,myThid) = aim_albedo(I,J,bi,bj)/100. |
c alb0(I2,myThid) = aim_albedo(I,J,bi,bj)/100. |
314 |
|
alb0(I2,myThid) = aim_albedo(I,J,bi,bj) |
315 |
ENDDO |
ENDDO |
316 |
ENDDO |
ENDDO |
317 |
C Read in surface temperature data (input is in absolute temperature) |
C Read in surface temperature data (input is in absolute temperature) |
341 |
DO I=1,sNx |
DO I=1,sNx |
342 |
I2 = (sNx)*(J-1)+I |
I2 = (sNx)*(J-1)+I |
343 |
soilq1(I2,myThid) = 0. |
soilq1(I2,myThid) = 0. |
344 |
soilq1(I2,myThid) = aim_soilMoisture(I,J,bi,bj)/20. |
c soilq1(I2,myThid) = aim_soilMoisture(I,J,bi,bj)/20. |
345 |
|
soilq1(I2,myThid) = aim_soilMoisture(I,J,bi,bj) |
346 |
ENDDO |
ENDDO |
347 |
ENDDO |
ENDDO |
348 |
C_cnh01 ENDIF |
C_cnh01 ENDIF |
367 |
C |
C |
368 |
C Addition may 15 . Reset humidity to 0. if negative |
C Addition may 15 . Reset humidity to 0. if negative |
369 |
C --------------------------------------------------- |
C --------------------------------------------------- |
370 |
Caja DO K=1,Nr |
#ifdef OLD_AIM_INTERFACE |
371 |
Caja DO J=1-OLy,sNy+OLy |
DO K=1,Nr |
372 |
Caja DO I=1-Olx,sNx+OLx |
DO J=1-OLy,sNy+OLy |
373 |
Caja IF ( salt(i,j,k,bi,bj) .LT. 0. .OR. K .EQ. Nr ) THEN |
DO I=1-Olx,sNx+OLx |
374 |
Caja salt(i,j,k,bi,bj) = 0. |
IF ( salt(i,j,k,bi,bj) .LT. 0. .OR. K .EQ. Nr ) THEN |
375 |
Caja ENDIF |
salt(i,j,k,bi,bj) = 0. |
376 |
Caja ENDDO |
ENDIF |
377 |
Caja ENDDO |
ENDDO |
378 |
Caja ENDDO |
ENDDO |
379 |
|
ENDDO |
380 |
|
#endif /* OLD_AIM_INTERFACE */ |
381 |
|
|
382 |
CALL PDRIVER( tYear, myThid ) |
CALL PDRIVER( tYear, myThid ) |
383 |
|
|