42 |
#include "AIM_GRID.h" |
#include "AIM_GRID.h" |
43 |
#include "com_physvar.h" |
#include "com_physvar.h" |
44 |
#include "com_forcing.h" |
#include "com_forcing.h" |
45 |
|
#include "AIM2DYN.h" |
46 |
|
|
47 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
48 |
C == Routine arguments == |
C == Routine arguments == |
55 |
CEOP |
CEOP |
56 |
|
|
57 |
#ifdef ALLOW_AIM |
#ifdef ALLOW_AIM |
58 |
|
C !FUNCTIONS: |
59 |
|
C !LOCAL VARIABLES: |
60 |
|
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
61 |
|
C-- Local Variables originally (Speedy) in common bloc (com_forcing.h): |
62 |
|
C-- COMMON /FORFIX/ Time invariant forcing fields (initialise in INFORC) |
63 |
|
C phi0 :: surface geopotential |
64 |
|
_RL phi0 (NGP) |
65 |
|
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
66 |
C == Local variables == |
C == Local variables == |
67 |
C bi,bj :: Tile indices |
C bi,bj :: Tile indices |
68 |
C i,j,k,I2 :: Loop counters |
C i,j,k,I2 :: Loop counters |
76 |
_RL aim_sWght0, aim_sWght1 |
_RL aim_sWght0, aim_sWght1 |
77 |
_RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
78 |
|
|
79 |
|
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
80 |
|
|
81 |
#ifdef ALLOW_AIM_CO2 |
#ifdef ALLOW_AIM_CO2 |
82 |
CALL AIM_DO_CO2( myTime, myIter, myThid ) |
CALL AIM_DO_CO2( myTime, myIter, myThid ) |
83 |
#endif |
#endif |
88 |
|
|
89 |
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), |
90 |
C ==> move water wapor from the stratos to the surface level. |
C ==> move water wapor from the stratos to the surface level. |
91 |
DO j = 1-Oly, sNy+Oly |
DO j = 1-OLy, sNy+OLy |
92 |
DO i = 1-Olx, sNx+Olx |
DO i = 1-OLx, sNx+OLx |
93 |
k = ksurfC(i,j,bi,bj) |
k = kSurfC(i,j,bi,bj) |
94 |
IF (k.LE.Nr) |
IF (k.LE.Nr) |
95 |
& salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) |
& salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) |
96 |
& + salt(i,j,Nr,bi,bj)*drF(Nr)*recip_drF(k) |
& + salt(i,j,Nr,bi,bj)*drF(Nr)*recip_drF(k) |
97 |
& *hFacC(i,j,Nr,bi,bj)*recip_hFacC(i,j,k,bi,bj) |
& *hFacC(i,j,Nr,bi,bj)*recip_hFacC(i,j,k,bi,bj) |
98 |
salt(i,j,Nr,bi,bj) = 0. |
salt(i,j,Nr,bi,bj) = 0. |
99 |
ENDDO |
ENDDO |
100 |
ENDDO |
ENDDO |
101 |
|
|
102 |
|
#ifdef OLD_THSICE_CALL_SEQUENCE |
103 |
#ifdef ALLOW_THSICE |
#ifdef ALLOW_THSICE |
104 |
IF ( useThSIce ) THEN |
IF ( useThSIce ) THEN |
105 |
C- do sea-ice advection before setting any surface BC. |
C- do sea-ice advection before setting any surface BC. |
106 |
CALL THSICE_DO_ADVECT( |
CALL THSICE_DO_ADVECT( |
107 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
108 |
ENDIF |
ENDIF |
109 |
#endif /* ALLOW_THSICE */ |
#endif /* ALLOW_THSICE */ |
110 |
|
#endif /* OLD_THSICE_CALL_SEQUENCE */ |
111 |
|
|
112 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
113 |
|
|
114 |
C- Physics package needs to know time of year as a fraction |
C- Physics package needs to know time of year as a fraction |
115 |
yearLength = 86400.*360. |
yearLength = 86400.*360. |
116 |
tYear = MOD(myTime/yearLength, 1. _d 0) |
tYear = MOD(myTime/yearLength, 1. _d 0) |
117 |
|
|
118 |
C-- Set surface Boundary Conditions for atmos. physics package: |
C-- Set surface Boundary Conditions for atmos. physics package: |
119 |
C (Albedo, Soil moisture, Surf Temp, Land sea mask) |
C (Albedo, Soil moisture, Surf Temp, Land sea mask) |
120 |
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) |
121 |
CALL AIM_SURF_BC( |
CALL AIM_SURF_BC( |
122 |
U tYear, |
U tYear, |
123 |
O aim_sWght0, aim_sWght1, |
O aim_sWght0, aim_sWght1, |
124 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
125 |
|
|
126 |
C-- Set surface geopotential: (g * orographic height) |
C-- Set surface geopotential: (g * orographic height) |
127 |
DO j=1,sNy |
DO j=1,sNy |
128 |
DO i=1,sNx |
DO i=1,sNx |
129 |
I2 = i+(j-1)*sNx |
I2 = i+(j-1)*sNx |
130 |
PHI0(I2) = gravity*topoZ(i,j,bi,bj) |
PHI0(I2) = gravity*topoZ(i,j,bi,bj) |
131 |
ENDDO |
ENDDO |
132 |
ENDDO |
ENDDO |
133 |
|
|
134 |
C-- Set topographic dependent FOROG var (originally in common SFLFIX); |
C-- Set topographic dependent FOROG var (originally in common SFLFIX); |
135 |
C used to compute for wind stress over land |
C used to compute for wind stress over land |
143 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
144 |
|
|
145 |
C- Compute atmospheric-physics tendencies (call the main AIM S/R) |
C- Compute atmospheric-physics tendencies (call the main AIM S/R) |
146 |
CALL PHY_DRIVER( tYear, useDiagnostics, |
CALL PHY_DRIVER( tYear, useDiagnostics, |
147 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
148 |
|
|
149 |
CALL AIM_AIM2DYN( bi, bj, myTime, myIter, myThid ) |
CALL AIM_AIM2DYN( bi, bj, myTime, myIter, myThid ) |
150 |
|
|
151 |
#ifdef ALLOW_LAND |
#ifdef ALLOW_LAND |
152 |
IF (useLand) THEN |
IF (useLand) THEN |
153 |
C- prepare Surface flux over land for land package |
C- prepare Surface flux over land for land package |
154 |
CALL AIM_AIM2LAND( aim_landFr, bi, bj, |
CALL AIM_AIM2LAND( aim_landFr, bi, bj, |
155 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
156 |
|
|
157 |
C- Step forward land model |
C- Step forward land model |
158 |
CALL LAND_STEPFWD( aim_landFr, bi, bj, |
CALL LAND_STEPFWD( aim_landFr, bi, bj, |
159 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
160 |
|
|
161 |
C- Land diagnostics : write snap-shot & cumulate for TimeAve output |
C- Land diagnostics : write snap-shot & cumulate for TimeAve output |
162 |
CALL LAND_DO_DIAGS( aim_landFr, bi, bj, |
CALL LAND_DO_DIAGS( aim_landFr, bi, bj, |
163 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
164 |
|
|
165 |
ENDIF |
ENDIF |
166 |
#endif /* ALLOW_LAND */ |
#endif /* ALLOW_LAND */ |
167 |
|
|
168 |
C- surface fluxes over ocean (ice-free & ice covered) |
C- surface fluxes over ocean (ice-free & ice covered) |
172 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
173 |
|
|
174 |
#ifdef ALLOW_THSICE |
#ifdef ALLOW_THSICE |
175 |
IF ( useThSIce ) THEN |
IF ( useThSIce ) THEN |
|
|
|
176 |
C- Step forward sea-ice model |
C- Step forward sea-ice model |
177 |
CALL THSICE_STEP_FWD( bi, bj, 1, sNx, 1, sNy, |
CALL THSICE_STEP_FWD( bi, bj, 1, sNx, 1, sNy, |
178 |
I prcAtm, |
I prcAtm, |
179 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
180 |
|
ENDIF |
181 |
|
#endif /* ALLOW_THSICE */ |
182 |
|
|
183 |
C- Slab Ocean : step forward ocean mixed-layer temp. & salinity |
C- AIM diagnostics : write snap-shot & cumulate for TimeAve output |
184 |
CALL THSICE_SLAB_OCEAN( |
CALL AIM_DIAGNOSTICS( bi, bj, myTime, myIter, myThid ) |
|
I aim_sWght0, aim_sWght1, |
|
|
O dTsurf(1,2,myThid), |
|
|
I bi, bj, myTime, myIter, myThid ) |
|
185 |
|
|
186 |
CALL THSICE_AVE( |
C-- end bi,bj loops. |
187 |
I bi, bj, myTime, myIter, myThid ) |
ENDDO |
188 |
|
ENDDO |
189 |
|
|
190 |
|
#ifndef OLD_THSICE_CALL_SEQUENCE |
191 |
|
#ifdef ALLOW_THSICE |
192 |
|
IF ( useThSIce ) THEN |
193 |
|
C-- Exchange fields that are advected by seaice dynamics |
194 |
|
CALL THSICE_DO_EXCH( myThid ) |
195 |
|
C- do sea-ice advection after sea-ice thermodynamics |
196 |
|
CALL THSICE_DO_ADVECT( |
197 |
|
I 0, 0, myTime, myIter, myThid ) |
198 |
ENDIF |
ENDIF |
199 |
#endif /* ALLOW_THSICE */ |
#endif /* ALLOW_THSICE */ |
200 |
|
#endif /* ndef OLD_THSICE_CALL_SEQUENCE */ |
201 |
|
|
202 |
|
DO bj=myByLo(myThid),myByHi(myThid) |
203 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
204 |
|
|
205 |
|
#ifdef ALLOW_THSICE |
206 |
|
IF ( useThSIce ) THEN |
207 |
|
C- Slab Ocean : step forward ocean mixed-layer temp. & salinity |
208 |
|
CALL THSICE_SLAB_OCEAN( |
209 |
|
I aim_sWght0, aim_sWght1, |
210 |
|
O dTsurf(1,2,myThid), |
211 |
|
I bi, bj, myTime, myIter, myThid ) |
212 |
|
CALL THSICE_AVE( |
213 |
|
I bi, bj, myTime, myIter, myThid ) |
214 |
|
ENDIF |
215 |
|
#endif /* ALLOW_THSICE */ |
216 |
|
|
217 |
#ifdef COMPONENT_MODULE |
#ifdef COMPONENT_MODULE |
218 |
IF ( useCoupler ) THEN |
IF ( useCoupler ) THEN |
219 |
CALL ATM_STORE_MY_DATA( bi, bj, myTime, myIter, myThid ) |
CALL ATM_STORE_MY_DATA( bi, bj, myTime, myIter, myThid ) |
220 |
ENDIF |
ENDIF |
221 |
#endif /* COMPONENT_MODULE */ |
#endif /* COMPONENT_MODULE */ |
222 |
|
|
|
C- AIM diagnostics : write snap-shot & cumulate for TimeAve output |
|
|
CALL AIM_DIAGNOSTICS( bi, bj, myTime, myIter, myThid ) |
|
|
|
|
223 |
C-- end bi,bj loops. |
C-- end bi,bj loops. |
224 |
ENDDO |
ENDDO |
225 |
ENDDO |
ENDDO |
226 |
|
|
227 |
|
C-- do exchanges for AIM related quantities: |
228 |
|
_EXCH_XY_RL( aim_drag, myThid ) |
229 |
|
|
230 |
|
#ifdef OLD_THSICE_CALL_SEQUENCE |
231 |
|
#ifdef ALLOW_THSICE |
232 |
|
IF (useThSIce) THEN |
233 |
|
C-- Exchange fields that are advected by seaice dynamics |
234 |
|
CALL THSICE_DO_EXCH( myThid ) |
235 |
|
ENDIF |
236 |
|
#endif |
237 |
|
#endif /* OLD_THSICE_CALL_SEQUENCE */ |
238 |
|
|
239 |
|
#ifdef COMPONENT_MODULE |
240 |
|
IF ( useCoupler ) THEN |
241 |
|
DO bj=myByLo(myThid),myByHi(myThid) |
242 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
243 |
|
CALL ATM_STORE_TAUX( bi,bj, myTime, myIter, myThid ) |
244 |
|
CALL ATM_STORE_TAUY( bi,bj, myTime, myIter, myThid ) |
245 |
|
ENDDO |
246 |
|
ENDDO |
247 |
|
ENDIF |
248 |
|
#endif /* COMPONENT_MODULE */ |
249 |
|
|
250 |
#endif /* ALLOW_AIM */ |
#endif /* ALLOW_AIM */ |
251 |
|
|
252 |
RETURN |
RETURN |