6 |
CBOP |
CBOP |
7 |
C !ROUTINE: AIM_DO_PHYSICS |
C !ROUTINE: AIM_DO_PHYSICS |
8 |
C !INTERFACE: |
C !INTERFACE: |
9 |
SUBROUTINE AIM_DO_PHYSICS( bi, bj, myTime, myIter, myThid ) |
SUBROUTINE AIM_DO_PHYSICS( myTime, myIter, myThid ) |
10 |
|
|
11 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
12 |
C *==================================================================* |
C *==================================================================* |
13 |
C | S/R AIM_DO_PHYSICS |
C | S/R AIM_DO_PHYSICS |
45 |
|
|
46 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
47 |
C == Routine arguments == |
C == Routine arguments == |
48 |
C bi,bj - Tile index |
C myTime :: Current time in simulation (s) |
49 |
C myTime - Current time of simulation ( s ) |
C myIter :: Current iteration number |
50 |
C myIter - Current iteration number in simulation |
C myThid :: My Thread Id. number |
51 |
C myThid - Number of this instance of the routine |
_RL myTime |
52 |
INTEGER bi, bj, myIter, myThid |
INTEGER myIter |
53 |
_RL myTime |
INTEGER myThid |
54 |
CEOP |
CEOP |
55 |
|
|
56 |
#ifdef ALLOW_AIM |
#ifdef ALLOW_AIM |
57 |
C == Local variables == |
C == Local variables == |
58 |
C I,J,K,I2 - Loop counters |
C bi,bj :: Tile indices |
59 |
C tYear - Fraction into year |
C i,j,k,I2 :: Loop counters |
60 |
C Katm - Atmospheric K index |
C tYear :: Fraction into year |
61 |
C prcAtm :: total precip from the atmosphere [kg/m2/s] |
C aim_sWght0 :: weight for time interpolation of surface BC |
62 |
C evpAtm :: evaporation to the atmosphere [kg/m2/s] (>0 if evaporate) |
C aim_sWght1 :: 0/1 = time period before/after the current time |
63 |
C flxSW :: net Short-Wave heat flux into the ocean (+=down) [W/m2] |
C prcAtm :: total precip from the atmosphere [kg/m2/s] |
64 |
INTEGER I,J,K,I2 |
INTEGER bi,bj |
65 |
c INTEGER Katm |
INTEGER i,j,k,I2 |
66 |
_RL tYear, yearLength |
_RL tYear, yearLength |
67 |
|
_RL aim_sWght0, aim_sWght1 |
68 |
_RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
69 |
_RL evpAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
70 |
_RL flxSW (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
#ifdef ALLOW_AIM_CO2 |
71 |
|
CALL AIM_DO_CO2( myTime, myIter, myThid ) |
72 |
|
#endif |
73 |
|
|
74 |
|
C-- Start loops on tile indices |
75 |
|
DO bj=myByLo(myThid),myByHi(myThid) |
76 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
77 |
|
|
78 |
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), |
79 |
C ==> move water wapor from the stratos to the surface level. |
C ==> move water wapor from the stratos to the surface level. |
88 |
ENDDO |
ENDDO |
89 |
ENDDO |
ENDDO |
90 |
|
|
91 |
|
#ifdef ALLOW_THSICE |
92 |
|
IF ( useThSIce ) THEN |
93 |
|
C- do sea-ice advection before setting any surface BC. |
94 |
|
CALL THSICE_DO_ADVECT( |
95 |
|
I bi, bj, myTime, myIter, myThid ) |
96 |
|
ENDIF |
97 |
|
#endif /* ALLOW_THSICE */ |
98 |
|
|
99 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
100 |
|
|
101 |
C- Physics package needs to know time of year as a fraction |
C- Physics package needs to know time of year as a fraction |
102 |
yearLength = 86400.*360. |
yearLength = 86400.*360. |
103 |
tYear = mod(myTime/yearLength, 1. _d 0) |
tYear = MOD(myTime/yearLength, 1. _d 0) |
|
c tYear = myTime/(86400.*360.) - |
|
|
c & FLOAT(INT(myTime/(86400.*360.))) |
|
104 |
|
|
105 |
C-- Set surface Boundary Conditions for atmos. physics package: |
C-- Set surface Boundary Conditions for atmos. physics package: |
106 |
C (Albedo, Soil moisture, Surf Temp, Land sea mask) |
C (Albedo, Soil moisture, Surf Temp, Land sea mask) |
107 |
C includes some parts of S/R FORDATE from F.Molteni SPEDDY code (ver23) |
C includes some parts of S/R FORDATE from F.Molteni SPEDDY code (ver23) |
108 |
CALL AIM_SURF_BC( tYear, myTime, myIter, bi, bj, myThid ) |
CALL AIM_SURF_BC( |
109 |
|
U tYear, |
110 |
|
O aim_sWght0, aim_sWght1, |
111 |
|
I bi, bj, myTime, myIter, myThid ) |
112 |
|
|
113 |
C-- Set surface geopotential: (g * orographic height) |
C-- Set surface geopotential: (g * orographic height) |
114 |
DO J=1,sNy |
DO j=1,sNy |
115 |
DO I=1,sNx |
DO i=1,sNx |
116 |
I2 = I+(J-1)*sNx |
I2 = i+(j-1)*sNx |
117 |
PHI0(I2) = gravity*topoZ(i,j,bi,bj) |
PHI0(I2) = gravity*topoZ(i,j,bi,bj) |
118 |
ENDDO |
ENDDO |
119 |
ENDDO |
ENDDO |
130 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
131 |
|
|
132 |
C- Compute atmospheric-physics tendencies (call the main AIM S/R) |
C- Compute atmospheric-physics tendencies (call the main AIM S/R) |
133 |
CALL PHY_DRIVER( tYear, myTime, myIter, bi, bj, myThid ) |
CALL PHY_DRIVER( tYear, useDiagnostics, |
134 |
|
I bi, bj, myTime, myIter, myThid ) |
135 |
|
|
136 |
CALL AIM_AIM2DYN( bi, bj, myTime, myIter, myThid ) |
CALL AIM_AIM2DYN( bi, bj, myTime, myIter, myThid ) |
137 |
|
|
138 |
#ifdef ALLOW_LAND |
#ifdef ALLOW_LAND |
139 |
IF (useLand) THEN |
IF (useLand) THEN |
140 |
C- prepare Surface flux over land for land package |
C- prepare Surface flux over land for land package |
141 |
CALL AIM_AIM2LAND( aim_landFr, bi, bj, |
CALL AIM_AIM2LAND( aim_landFr, bi, bj, |
142 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
143 |
|
|
144 |
C- Step forward land model |
C- Step forward land model |
145 |
CALL LAND_STEPFWD( aim_landFr, bi, bj, |
CALL LAND_STEPFWD( aim_landFr, bi, bj, |
146 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
147 |
|
|
148 |
C- Land diagnostics : write snap-shot & cumulate for TimeAve output |
C- Land diagnostics : write snap-shot & cumulate for TimeAve output |
149 |
CALL LAND_DO_DIAGS( aim_landFr, bi, bj, |
CALL LAND_DO_DIAGS( aim_landFr, bi, bj, |
150 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
151 |
|
|
152 |
ENDIF |
ENDIF |
153 |
#endif /* ALLOW_LAND */ |
#endif /* ALLOW_LAND */ |
154 |
|
|
155 |
C- surface fluxes over ocean (ice-free & ice covered) |
C- surface fluxes over ocean (ice-free & ice covered) |
156 |
C used for diagnostics, thsice package and coupler |
C used for diagnostics, thsice package and coupler |
157 |
CALL AIM_AIM2SIOCE( aim_landFr, fmask1(1,3,myThid), |
CALL AIM_AIM2SIOCE( aim_landFr, fmask1(1,3,myThid), |
158 |
O prcAtm, evpAtm, flxSW, |
O prcAtm, |
159 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
160 |
|
|
161 |
#ifdef ALLOW_THSICE |
#ifdef ALLOW_THSICE |
163 |
|
|
164 |
C- Step forward sea-ice model |
C- Step forward sea-ice model |
165 |
CALL THSICE_STEP_FWD( bi, bj, 1, sNx, 1, sNy, |
CALL THSICE_STEP_FWD( bi, bj, 1, sNx, 1, sNy, |
166 |
I prcAtm, |
I prcAtm, |
|
U evpAtm, flxSW, |
|
167 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
168 |
|
|
169 |
C- Slab Ocean : step forward ocean mixed-layer temp. & salinity |
C- Slab Ocean : step forward ocean mixed-layer temp. & salinity |
170 |
CALL THSICE_SLAB_OCEAN( |
CALL THSICE_SLAB_OCEAN( |
171 |
O dTsurf(1,2,myThid), |
I aim_sWght0, aim_sWght1, |
172 |
I bi,bj, myThid ) |
O dTsurf(1,2,myThid), |
173 |
|
I bi, bj, myTime, myIter, myThid ) |
174 |
|
|
175 |
CALL THSICE_AVE( evpAtm, flxSW, |
CALL THSICE_AVE( |
176 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
177 |
|
|
178 |
ENDIF |
ENDIF |
180 |
|
|
181 |
#ifdef COMPONENT_MODULE |
#ifdef COMPONENT_MODULE |
182 |
IF ( useCoupler ) THEN |
IF ( useCoupler ) THEN |
183 |
CALL ATM_STORE_MY_DATA( bi, bj, myIter, myTime, myThid ) |
CALL ATM_STORE_MY_DATA( bi, bj, myTime, myIter, myThid ) |
184 |
ENDIF |
ENDIF |
185 |
#endif /* COMPONENT_MODULE */ |
#endif /* COMPONENT_MODULE */ |
186 |
|
|
187 |
C- AIM diagnostics : write snap-shot & cumulate for TimeAve output |
C- AIM diagnostics : write snap-shot & cumulate for TimeAve output |
188 |
CALL AIM_DIAGNOSTICS( bi, bj, myTime, myIter, myThid ) |
CALL AIM_DIAGNOSTICS( bi, bj, myTime, myIter, myThid ) |
189 |
|
|
190 |
|
C-- end bi,bj loops. |
191 |
|
ENDDO |
192 |
|
ENDDO |
193 |
#endif /* ALLOW_AIM */ |
#endif /* ALLOW_AIM */ |
194 |
|
|
195 |
RETURN |
RETURN |