1 | MODULE module_lmdz_phys |
---|
2 | ! |
---|
3 | ! Module to include LMDZ (http://lmdz.lmd.jussieu.fr/) physical packages in WRF |
---|
4 | ! |
---|
5 | ! L. Fita, Laboratoire Meterologie Dynamique, IPSL, UPMC, CNRS, Jussieu, Paris, France |
---|
6 | ! July 2013 |
---|
7 | ! |
---|
8 | CONTAINS |
---|
9 | |
---|
10 | SUBROUTINE call_lmdz_phys(wrf_grid, wrf_xtime, wrf_restart_alarm, & |
---|
11 | & wrf_Lon, wrf_Lat, & |
---|
12 | & wrf_T, wrf_U, wrf_V, & |
---|
13 | & wrf_perP, wrf_baseP, & |
---|
14 | & wbdyw, wrf_isrestart, & |
---|
15 | & wrf_islowbdyin & |
---|
16 | ! dimension arguments |
---|
17 | & ,wids,wide, wjds,wjde, wkds,wkde & |
---|
18 | & ,wims,wime, wjms,wjme, wkms,wkme & |
---|
19 | & ,wips,wipe, wjps,wjpe, wkps,wkpe & |
---|
20 | & ,wi_start,wi_end & |
---|
21 | & ,wj_start,wj_end & |
---|
22 | & ,wkts, wkte & |
---|
23 | & ,wnum_tiles & |
---|
24 | & ,wnum3dm, wparfirstscal, & |
---|
25 | & wnx, wny, wnz, & |
---|
26 | & wjulday, wgmt, wtime_step, & |
---|
27 | & wrf_fulleta, wrf_halfeta, wrf_dfulleta, & |
---|
28 | & wrf_fullpres, wrf_pergeopot, wrf_basegeopot, & |
---|
29 | & wrf_MOIST, wrf_w, wrf_ptop, & |
---|
30 | & wrf_permass, wrf_basemass, & |
---|
31 | & wrf_mut, wrf_muu, wrf_muv, & |
---|
32 | & wrf_mapfac, & |
---|
33 | & wrf_Utend, wrf_Vtend, wrf_Ttend, & |
---|
34 | & wrf_MOISTtend, wrf_psfctend, & |
---|
35 | & wrf_qvid, wrf_qcid, wrf_qrid, & |
---|
36 | & wrf_qsid, wrf_qiid, wrf_qhid, wrf_qgid, & |
---|
37 | & wrf_mapft, wrf_mapfu, wrf_mapfv, wrf_dx, wrf_dy, & |
---|
38 | & wrf_dbg, landcat, soilcat, & |
---|
39 | & wrf_l_pbl, wrf_l_con, wrf_l_thermals, wrf_l_wake, & |
---|
40 | & wrf_nsoillayers, & |
---|
41 | & icheck_p, jcheck_p, kcheck_p & |
---|
42 | & ) |
---|
43 | |
---|
44 | ! WRF modules |
---|
45 | USE module_model_constants |
---|
46 | USE module_domain_type |
---|
47 | |
---|
48 | ! LMDZ modules |
---|
49 | USE infotrac, ONLY: infotrac_init, type_trac |
---|
50 | USE comgeomphy |
---|
51 | USE control_mod |
---|
52 | USE indice_sol_mod |
---|
53 | USE phys_state_var_mod |
---|
54 | ! USE fonte_neige_mod, ONLY: fonte_neige_init, fonte_neige_final |
---|
55 | USE fonte_neige_mod |
---|
56 | USE iostart, ONLY: get_var |
---|
57 | USE surface_data |
---|
58 | USE pbl_surface_mod |
---|
59 | USE mod_grid_phy_lmdz, only : klon_glo |
---|
60 | |
---|
61 | ! WRF+LMDZ |
---|
62 | |
---|
63 | ! Used to initialize variables in an old fashion way... Now using 'lmdz_wrf_variables_mod' |
---|
64 | USE wrf_lmdz_mod |
---|
65 | USE lmdz_wrf_variables_mod |
---|
66 | USE NOread_limit_sub_variables |
---|
67 | USE output_lmdz_NOmodule |
---|
68 | |
---|
69 | IMPLICIT NONE |
---|
70 | |
---|
71 | INCLUDE "../lmdz/dimensions.h" |
---|
72 | INCLUDE "../lmdz/comvert.h" |
---|
73 | INCLUDE "../lmdz/temps.h" |
---|
74 | INCLUDE "../lmdz/dimsoil.h" |
---|
75 | |
---|
76 | TYPE(domain) , TARGET :: wrf_grid |
---|
77 | |
---|
78 | REAL, INTENT(IN) :: wrf_xtime, wrf_Ptop, & |
---|
79 | wgmt, wrf_dx, wrf_dy |
---|
80 | LOGICAL, INTENT(IN) :: wrf_restart_alarm, & |
---|
81 | wrf_isrestart, wrf_islowbdyin |
---|
82 | |
---|
83 | INTEGER, INTENT(IN) :: wnx, wny, wnz, wbdyw |
---|
84 | |
---|
85 | INTEGER, INTENT(IN) :: & |
---|
86 | & wids,wide, wjds,wjde, wkds,wkde, & |
---|
87 | wims,wime, wjms,wjme, wkms,wkme, & |
---|
88 | wips,wipe, wjps,wjpe, wkps,wkpe, & |
---|
89 | wkts,wkte, wnum_tiles |
---|
90 | |
---|
91 | INTEGER, DIMENSION(wnum_tiles), INTENT(IN) :: & |
---|
92 | & wi_start,wi_end,wj_start,wj_end |
---|
93 | INTEGER, INTENT(IN) :: wparfirstscal, wnum3dm |
---|
94 | REAL, INTENT(IN) :: wjulday |
---|
95 | REAL, INTENT(IN) :: wtime_step |
---|
96 | INTEGER, INTENT(IN) :: wrf_qvid, wrf_qcid, & |
---|
97 | & wrf_qrid, wrf_qsid, wrf_qiid, wrf_qhid, wrf_qgid, wrf_dbg |
---|
98 | |
---|
99 | REAL, INTENT(IN), DIMENSION(wkms:wkme) :: wrf_fulleta |
---|
100 | REAL, INTENT(IN), DIMENSION(wkms:wkme) :: wrf_halfeta, wrf_dfulleta |
---|
101 | |
---|
102 | REAL, INTENT(IN), DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: & |
---|
103 | & wrf_T, wrf_perP, wrf_baseP, wrf_U, wrf_V |
---|
104 | |
---|
105 | REAL, INTENT(OUT), DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: & |
---|
106 | & wrf_Ttend, wrf_Utend, wrf_Vtend |
---|
107 | |
---|
108 | REAL, INTENT(IN), DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: & |
---|
109 | & wrf_fullpres, wrf_pergeopot, wrf_basegeopot, wrf_w |
---|
110 | |
---|
111 | REAL, INTENT(IN), DIMENSION(wims:wime,wjms:wjme) :: wrf_Lon, wrf_Lat, & |
---|
112 | & wrf_basemass, wrf_permass, wrf_mapft, wrf_mapfu, wrf_mapfv, wrf_mut, & |
---|
113 | & wrf_muu, wrf_muv, wrf_mapfac |
---|
114 | |
---|
115 | REAL, INTENT(OUT), DIMENSION(wims:wime,wjms:wjme) :: wrf_psfctend |
---|
116 | |
---|
117 | REAL, INTENT(IN), DIMENSION(wims:wime,wkms:wkme,wjms:wjme,1:wnum3dm) :: & |
---|
118 | & wrf_MOIST |
---|
119 | |
---|
120 | REAL, INTENT(OUT), DIMENSION(wims:wime,wkms:wkme,wjms:wjme,1:wnum3dm) :: & |
---|
121 | & wrf_MOISTtend |
---|
122 | |
---|
123 | CHARACTER(LEN=256), INTENT(IN) :: landcat, soilcat |
---|
124 | INTEGER, INTENT(IN) :: wrf_l_pbl, wrf_l_con, & |
---|
125 | wrf_l_thermals, wrf_l_wake |
---|
126 | INTEGER, INTENT(IN) :: wrf_nsoillayers |
---|
127 | INTEGER, INTENT(IN) :: icheck_p, jcheck_p, & |
---|
128 | kcheck_p |
---|
129 | ! Local |
---|
130 | INTEGER :: ip, jp, kp, lp |
---|
131 | |
---|
132 | REAL, DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: wrf_Temp, & |
---|
133 | & wrf_Temptend, wrf_P, wrfMASSValues |
---|
134 | REAL, DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: wrfUdestagg, wrfVdestagg,& |
---|
135 | & wrfUtenddestagg, wrfVtenddestagg |
---|
136 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw), wkms:wkme-1) :: & |
---|
137 | & GeopotValues, TValues, TtendValues, HalfPressValues, WFluxMassValues |
---|
138 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw), wkms:wkme-1) :: & !! DE-STAGGED !! |
---|
139 | & UValues, UtendValues |
---|
140 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw), wkms:wkme-1) :: & !! DE-STAGGED !! |
---|
141 | & VValues, VtendValues |
---|
142 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw), wkms:wkme) :: & !! Z-STAGG !! |
---|
143 | & FullPressValues |
---|
144 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw)) :: & |
---|
145 | & sfcGeopotValues |
---|
146 | REAL, ALLOCATABLE, DIMENSION(:,:,:) :: MixingRatioValues, & |
---|
147 | & MixingRatiotendValues |
---|
148 | |
---|
149 | REAL, DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: wrfWValues, & |
---|
150 | & wrfPERMASSValues, wrfZFluxMassValues |
---|
151 | REAL, DIMENSION(wims:wime,wkms:wkme,wjms:wjme) :: wrf_geopot, w3Dmat,& |
---|
152 | & wrf_geopot_half |
---|
153 | REAL, DIMENSION(wims:wime,wjms:wjme) :: wrf_sfcgeopot |
---|
154 | |
---|
155 | LOGICAL :: lmdz_debut, lmdz_lafin |
---|
156 | |
---|
157 | INTEGER :: k, ix, iy, iz, iq, ixy, & |
---|
158 | & lmdzp, ilmdz, jlmdz, ir, ixx, iyy |
---|
159 | INTEGER :: dimx, dimy, dimz, dimxy |
---|
160 | INTEGER :: ddimx, ddimy, ddimxy, ddimxy2 |
---|
161 | INTEGER :: dim_klon_glo, dim_ngridmx |
---|
162 | INTEGER :: im2, jm2, km2 |
---|
163 | INTEGER :: lmdzmixingratios |
---|
164 | CHARACTER (LEN=1024) :: message, wrf_err_message |
---|
165 | |
---|
166 | INTEGER, PARAMETER :: Nphykeys=20 |
---|
167 | REAL, DIMENSION(Nphykeys) :: phykeys |
---|
168 | |
---|
169 | REAL, DIMENSION(2,(wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw),wkms:wkme-1) :: & |
---|
170 | & lmdz_dudyn, l3Dmat |
---|
171 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw),3) :: lmdz_PVtheta |
---|
172 | REAL, DIMENSION(wkms:wkme-1) :: lmdzoutP |
---|
173 | REAL, DIMENSION((wime-wims-2*wbdyw),(wjme-wjms-2*wbdyw)) :: wrf_area |
---|
174 | REAL, DIMENSION((wime-wims-2*wbdyw),(wjme-wjms-2*wbdyw)) :: wrf_cu |
---|
175 | REAL, DIMENSION((wime-wims-2*wbdyw),(wjme-wjms-2*wbdyw)) :: wrf_cv |
---|
176 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw)) :: AreaValues, & |
---|
177 | LonValues, LatValues, PsfctendValues |
---|
178 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw)) :: CUValues, CVValues |
---|
179 | REAL, DIMENSION((wime-wims-2*wbdyw)*(wjme-wjms-2*wbdyw)) :: runoff_lic |
---|
180 | LOGICAL :: existsfile |
---|
181 | INTEGER :: ierr |
---|
182 | CHARACTER(LEN=50) :: errmsg, wrnmsg, subname |
---|
183 | CHARACTER(LEN=100) :: defilen, defvarn, defstr |
---|
184 | INTEGER :: funit, defint |
---|
185 | LOGICAL :: is_used, defbool |
---|
186 | REAL, DIMENSION(20) :: lmdz_clesphy0 |
---|
187 | INTEGER :: iflag_phys |
---|
188 | REAL :: defreal,ksoilmax |
---|
189 | REAL, DIMENSION(4) :: ksoils |
---|
190 | REAL :: Pi |
---|
191 | CHARACTER(LEN=50) :: LMDZvarmethod, Spt, Spt3D |
---|
192 | CHARACTER(LEN=4) :: ipS, jpS, kpS |
---|
193 | CHARACTER(LEN=8) :: lpS |
---|
194 | INTEGER :: nlanduse |
---|
195 | REAL, DIMENSION(11) :: ORCHIDEElevels |
---|
196 | INTEGER :: Nsoillayers,begdataset, & |
---|
197 | Nvars,Nrs,Ncs,Nwrfsoiltypes |
---|
198 | REAL :: soilTmass |
---|
199 | CHARACTER(LEN=50) :: datasetname |
---|
200 | CHARACTER(LEN=100) :: tablename |
---|
201 | REAL, ALLOCATABLE, DIMENSION(:,:,:) :: soilvals |
---|
202 | CHARACTER(LEN=50), ALLOCATABLE, DIMENSION(:) :: soilvalns |
---|
203 | INTEGER :: lpbl, lcon, lth, lwake |
---|
204 | TYPE(WRFU_Alarm), TARGET, DIMENSION(MAX_WRF_ALARMS) :: wrf_alarms |
---|
205 | |
---|
206 | !!!!!!! Variables |
---|
207 | ! |
---|
208 | ! wrf_xtime: WRF actual timestep (in minutes since simulation started) |
---|
209 | ! wrf_restart_alarm: WRF value indicating whether this is a restart time-step |
---|
210 | ! wrf_T: WRF 3D temperature |
---|
211 | ! wrf_perP: WRF 3D perturbation of the pressure |
---|
212 | ! wrf_baseP: WRF 3D base pressure |
---|
213 | ! wn[x/y/z]: WRF dimensions at each axis |
---|
214 | ! wbdyw: number of grid points in the sponge zone |
---|
215 | ! wids: start for i in domain |
---|
216 | ! wide: end for i in domain |
---|
217 | ! wjds: start for j in domain |
---|
218 | ! wjde: end for j in domain |
---|
219 | ! wkds: start for k in domain |
---|
220 | ! wkde: end for k in domain |
---|
221 | ! wims: start for i in memory |
---|
222 | ! wime: end for i in memory |
---|
223 | ! wjms: start for j in memory |
---|
224 | ! wjme: end for j in memory |
---|
225 | ! wips: start for i in patch |
---|
226 | ! wipe: end for i in patch |
---|
227 | ! wjps: start for j in patch |
---|
228 | ! wjpe: end for j in patch |
---|
229 | ! wkms: start for k in memory |
---|
230 | ! wkme: end for k in memory |
---|
231 | ! wi_start: start indices for i in tile |
---|
232 | ! wi_end: end indices for i in tile |
---|
233 | ! wj_start: start indices for j in tile |
---|
234 | ! wj_end: end indices for j in tile |
---|
235 | ! wkts: start for k in tile |
---|
236 | ! wkte: end for k in tile |
---|
237 | ! wnum_tiles: number of tiles |
---|
238 | ! wjulday: WRF julian day |
---|
239 | ! wgmt: WRF gmt hour (0, 1) |
---|
240 | ! wtime_step: WRF time-step (in seconds) |
---|
241 | ! wrf_dbg: level of debug from WRF |
---|
242 | ! wrf_isrestart: flag indicating whether simulation is beggining from a restart or |
---|
243 | ! not (zero time since simulation started ) |
---|
244 | ! |
---|
245 | ! lmdz_debut: flag indicating if this is the first step for LMDZ |
---|
246 | ! lmdz_lafin: flag indicating if this is the last step for LMDZ |
---|
247 | ! wrf_fulleta: WRF full mass eta levels (w) |
---|
248 | ! wrf_dfulleta: WRF full mass high between eta levels (w) |
---|
249 | ! wrf_halfeta: WRF half mass eta levels (t, u, v, h) |
---|
250 | ! wrf_Ptop: WRF top pressure |
---|
251 | ! wrf_Lon: WRF longitudes |
---|
252 | ! wrf_Lat: WRF latitudes |
---|
253 | ! wrf_T: WRF potential temperature |
---|
254 | ! wrf_Ttend: WRF potential temperature tendency |
---|
255 | ! wrf_Temp: WRF temperature |
---|
256 | ! wrf_Temptend: WRF temperature tendency |
---|
257 | ! wrf_perP: WRF perturbation of pressure |
---|
258 | ! wrf_baseP: WRF base of pressure |
---|
259 | ! wrf_P: WRF pressure |
---|
260 | ! wrf_U: WRF x-wind speed |
---|
261 | ! wrf_Utend: WRF x-wind speed tendency |
---|
262 | ! wrf_V: WRF y-wind speed |
---|
263 | ! wrf_Vtend: WRF y-wind speed tendency |
---|
264 | ! wrf_fullpres: WRF pressure in full eta levels |
---|
265 | ! wrf_pergeopot: WRF perturbation of geopotential |
---|
266 | ! wrf_basegeopot: WRF base of geopotential |
---|
267 | ! wrf_geopot: WRF geopotential |
---|
268 | ! wrf_geopot_half: WRF geopotential at the half eta level |
---|
269 | ! wrf_psfctend: WRF surface pressure tendency |
---|
270 | ! wrf_sfcgeopot: WRF surface geopotential |
---|
271 | ! wrf_MOIST: WRF MOIST ARRAY (water spieces and tracers) |
---|
272 | ! wrf_MOISTtend: WRF MOIST tendency ARRAY (water spieces and tracers) |
---|
273 | ! wrf_qvid: WRF water vapor index of wrf_MOIST |
---|
274 | ! wrf_qcid: WRF cloud liquid water index of wrf_MOIST |
---|
275 | ! wrf_qrid: WRF rain liquid water index of wrf_MOIST |
---|
276 | ! wnum3dm: WRF number of water species |
---|
277 | ! wrf_w: WRF vertical velocity |
---|
278 | ! wrf_permass: WRF perturbation dry air mass in column |
---|
279 | ! wrf_basemass: WRF base dry air mass in column |
---|
280 | ! wrf_mut: WRF total dry air mass column on mass points |
---|
281 | ! wrf_muu: WRF total dry air mass column on u-wind grid points |
---|
282 | ! wrf_muv: WRF total dry air mass column on v-wind gid points |
---|
283 | ! wrfWValues: staggered WRF vertical velocity (in m s-1) |
---|
284 | ! wrfPERMASSValues: de-staggered WRF perturbation of dry mass column (in Pa) |
---|
285 | ! wrfMASSValues: de-staggered WRF perturbation of dry mass column (in kg) |
---|
286 | ! wrfZFluxMassValues: WRF vertical flux mass values (kg s-1) |
---|
287 | ! wrf_mapf[t/u/v]: WRF map factor for Temperature, u-wind and v-wind grid points |
---|
288 | ! wrf_d[x/y]: length of the grid spacing in the x and y direction (in m) |
---|
289 | ! wrf_area: WRF area of the grid cells |
---|
290 | ! wrf_c[u/v]: WRF covariant values for wind components |
---|
291 | ! landcat: land category used in the simulation |
---|
292 | ! nlanduse: number of soil types in the WRF landuse variable |
---|
293 | ! |
---|
294 | ! LonValues: 2D-LMDZ array of WRF longitudes (in rad) |
---|
295 | ! LatValues: 2D-LMDZ array of WRF latitudes (in rad) |
---|
296 | ! TValues: 2D-LMDZ array of WRF temperatures (in K) |
---|
297 | ! TtendValues: 2D-LMDZ tendency array of WRF temperatures (in K) |
---|
298 | ! HalfPressValues: 2D-LMDZ array of WRF pressure at half-mass levels (in Pa) |
---|
299 | ! UValues: 2D-LMDZ array of WRF x-wind speed (in m s-1) |
---|
300 | ! UtendValues: 2D-LMDZ array of WRF tendency x-wind speed (in m s-2) |
---|
301 | ! VValues: 2D-LMDZ array of WRF y-wind speed (in m s-1) |
---|
302 | ! VtendValues: 2D-LMDZ array of WRF tendency y-wind speed (in m s-2) |
---|
303 | ! PsfctendValues: 2D-LMDZ array of surface pressure tendency y-wind speed (in Pa s-1) |
---|
304 | ! FullPressValues: 2D-LMDZ array of WRF pressure at full-mass levels (in Pa) |
---|
305 | ! GeopotValues: 2D-LMDZ array of WRF geopotential (in m2 s-2) |
---|
306 | ! sfcGeopotValues: LMDZ array of WRF sfc geopotential (in m2 s-2) |
---|
307 | ! lmdzmixingratios: number of 'mixing ratios' to pass to the LMDZ physics |
---|
308 | ! MixingRatioValues: 2D-LMDZ array of Mixing Ratios (in kg kg-1) |
---|
309 | ! MixingRatiotendValues: 2D-LMDZ array of tendency Mixing Ratios (in kg kg-1 s-1) |
---|
310 | ! WFluxMassValues: 2Dvertical mass flux values (in kg m s-1) |
---|
311 | ! phykeys: LMDZ obsolete control I/O vector |
---|
312 | ! lmdz_dudyn: LMDZ obsolete vector |
---|
313 | ! lmdz_PVtheta: LMDZ obsolete PV values at given theta levels |
---|
314 | ! lmdzoutP: LMDZ output pressure values (using same eta levels, but imposing Psfc=1000 hPa) |
---|
315 | ! preff: refernce pressure for lmdzouP |
---|
316 | ! AreaValues: LMDZ area (m2) |
---|
317 | ! CUArea: LMDZ cu coeff. (u_covariant = cu * u) |
---|
318 | ! CVArea: LMDZ cv coeff. (v_covariant = cv * v) |
---|
319 | ! |
---|
320 | !!!!!!! Subroutines/Functions |
---|
321 | ! WRFmoist_LMDZmoist: Subroutine to transform from WRF moisture array to the LMDZ moisture array |
---|
322 | ! eta_to_pressure: Subroutine to transform from eta levels to pressure levels |
---|
323 | ! vect_mat: Subroutine to transform a LMDZ physic 1D vector to a 3D matrix |
---|
324 | ! mat_vect: Subroutine to transform a 3D matrix to a LMDZ physic 1D vector |
---|
325 | ! temp_to_theta: Subroutine to transform from temperatures to WRF potential temperatures |
---|
326 | ! theta_to_temp: Subroutine to transform from WRF potential temperatures to temperature |
---|
327 | ! physiq: Subroutine with the LMDZ physics |
---|
328 | |
---|
329 | ! CAPITAL variables stand for the name of the variables inside the subroutines/functions |
---|
330 | |
---|
331 | !!!!!!! !!!!!! !!!!! !!!! !!! !! ! |
---|
332 | WRITE(message, *)' starting: module_lmdz_phys.F' |
---|
333 | CALL wrf_debug(75, message) |
---|
334 | |
---|
335 | PRINT *,' --------------------------------------------------------------------------------------------------' |
---|
336 | |
---|
337 | ! Basic definitions |
---|
338 | !! |
---|
339 | errmsg='ERROR -- error -- ERROR -- error' |
---|
340 | wrnmsg='WARNING -- warning -- WARNING -- warning' |
---|
341 | subname='module_lmdz_phys' |
---|
342 | |
---|
343 | Pi = 2.*ASIN(1.) |
---|
344 | |
---|
345 | type_trac = 'lmdz' |
---|
346 | |
---|
347 | dimx=wime-wims |
---|
348 | dimy=wjme-wjms |
---|
349 | dimz=wkme-wkms |
---|
350 | |
---|
351 | dimxy=dimx*dimy |
---|
352 | dim_klon_glo = dimx*dimy |
---|
353 | dim_ngridmx = dimx*dimy |
---|
354 | ddimx = dimx-2*wbdyw |
---|
355 | ddimy = dimy-2*wbdyw |
---|
356 | ddimxy=ddimx*ddimy |
---|
357 | ddimxy2=ddimx*(ddimy/2-1)+ddimx/2 |
---|
358 | |
---|
359 | ! Point to retrieve values for debugging |
---|
360 | ! ip=ddimx/2 |
---|
361 | ! jp=ddimy/2 |
---|
362 | ! kp=dimz/2 |
---|
363 | ! ip=5 |
---|
364 | ! jp=11 |
---|
365 | ip=icheck_p |
---|
366 | jp=jcheck_p |
---|
367 | kp=kcheck_p |
---|
368 | |
---|
369 | lp=ddimx*(jp-1)+ip |
---|
370 | WRITE(ipS,'(I4)')ip |
---|
371 | WRITE(jpS,'(I4)')jp |
---|
372 | WRITE(kpS,'(I4)')kp |
---|
373 | WRITE(lpS,'(I8)')lp |
---|
374 | Spt = TRIM(ipS) // ', '//TRIM(jpS) |
---|
375 | Spt3D = TRIM(ipS) // ', '//TRIM(jpS)//', '//TRIM(kpS) |
---|
376 | PRINT *,' checking point ip: ',ip,' jp: ',jp,' kp: ',kp,' lp: ',lp |
---|
377 | |
---|
378 | PRINT *,' Lluis in module_lmdz_phy itime_step= ', wrf_grid%itimestep, & |
---|
379 | ' wrf_xtime: ',wrf_xtime,' wrf_rst: ', wrf_isrestart,' wrf_lwbdy: ', & |
---|
380 | wrf_islowbdyin |
---|
381 | PRINT *,' Number of water species from WRF: ',wnum3dm |
---|
382 | |
---|
383 | phykeys=0. |
---|
384 | lmdz_dudyn=0. |
---|
385 | lmdz_PVtheta=0. |
---|
386 | |
---|
387 | ! Checking of first/last time-step for LMDZ |
---|
388 | !! |
---|
389 | lmdz_debut = .FALSE. |
---|
390 | lmdz_lafin = .FALSE. |
---|
391 | |
---|
392 | DO iy=1,ddimy |
---|
393 | DO ix=1,ddimx |
---|
394 | IF (wrf_Lon(ix,iy) < 0.) THEN |
---|
395 | LonValues(ddimx*(iy-1)+ix) = (360. + wrf_Lon(ix,iy))*Pi/180. |
---|
396 | ELSE |
---|
397 | LonValues(ddimx*(iy-1)+ix) = wrf_Lon(ix,iy)*Pi/180. |
---|
398 | END IF |
---|
399 | LatValues(ddimx*(iy-1)+ix) = wrf_Lat(ix,iy)*Pi/180. |
---|
400 | PsfctendValues(ddimx*(iy-1)+ix) = wrf_psfctend(ix,iy) |
---|
401 | END DO |
---|
402 | END DO |
---|
403 | |
---|
404 | ! Reshape can not be used? Different initial/ending indices ! |
---|
405 | ! LonValues = RESHAPE(wrf_Lon, (/ dimx*dimy/), ORDER=(/1/)) |
---|
406 | ! LatValues = RESHAPE(wrf_Lat, (/ dimx*dimy/), ORDER=(/1/)) |
---|
407 | |
---|
408 | firststep: IF ( wrf_xtime == 0 .OR. wrf_isrestart) THEN |
---|
409 | lmdz_debut = .TRUE. |
---|
410 | |
---|
411 | DO funit=10,100 |
---|
412 | INQUIRE(UNIT=funit, OPENED=is_used) |
---|
413 | IF (.NOT. is_used) EXIT |
---|
414 | END DO |
---|
415 | lmdz_clesphy0 = 0. |
---|
416 | |
---|
417 | CALL conf_gcm(funit, .TRUE., lmdz_clesphy0) |
---|
418 | ! L. Fita, wee need to provide the value |
---|
419 | annee_ref = anneeref |
---|
420 | day_ref = dayref |
---|
421 | |
---|
422 | ! Uploading LMDZ general configuration |
---|
423 | ! used instead call conf_gcm, since variables are not found in memory (or at least with a value) |
---|
424 | defilen = 'gcm.def' |
---|
425 | defvarn = 'iflag_phys' |
---|
426 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
427 | iflag_phys = defint |
---|
428 | |
---|
429 | ! Is not working it has an space... |
---|
430 | ! defvarn = 'type_trac' |
---|
431 | ! CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
432 | ! type_trac = TRIM(defstr) |
---|
433 | |
---|
434 | ! used instead call conf_gcm, since variables are not found in memory (or at least with a value) |
---|
435 | defilen = 'config.def' |
---|
436 | defvarn = 'type_ocean' |
---|
437 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
438 | type_ocean= TRIM(defstr) |
---|
439 | |
---|
440 | ! used instead call conf_gcm, since variables are not found in memory (or at least with a value) |
---|
441 | ! Looking for consistency for some namelist variables and *.def LMDZ values |
---|
442 | PRINT *,' Checking consistency between namelist and LMDZ *.def values' |
---|
443 | defilen = 'physiq.def' |
---|
444 | defvarn = 'iflag_pbl' |
---|
445 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
446 | lpbl = defint |
---|
447 | defvarn = 'iflag_con' |
---|
448 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
449 | lcon = defint |
---|
450 | defvarn = 'iflag_thermals' |
---|
451 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
452 | lth = defint |
---|
453 | defvarn = 'iflag_wake' |
---|
454 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
455 | lwake = defint |
---|
456 | |
---|
457 | IF (wrf_l_pbl /= lpbl) THEN |
---|
458 | PRINT *,TRIM(errmsg) |
---|
459 | PRINT *,' ' // TRIM(subname) // ' namelist LMDZ pbl value: ', & |
---|
460 | wrf_l_pbl,' differs from iflag_pbl= ',lpbl ,' in physiq.def !!!!' |
---|
461 | WRITE(wrf_err_message,*)' wrong namelist.input value !!' |
---|
462 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
463 | END IF |
---|
464 | IF (wrf_l_con /= lcon) THEN |
---|
465 | PRINT *,TRIM(errmsg) |
---|
466 | PRINT *,' ' // TRIM(subname) // ' namelist LMDZ convection value: ', & |
---|
467 | wrf_l_con,' differs from iflag_con= ',lcon ,' in physiq.def !!!!' |
---|
468 | WRITE(wrf_err_message,*)' wrong namelist.input value !!' |
---|
469 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
470 | END IF |
---|
471 | IF (wrf_l_thermals /= lth) THEN |
---|
472 | PRINT *,TRIM(errmsg) |
---|
473 | PRINT *,' ' // TRIM(subname) // ' namelist LMDZ thermals value: ', & |
---|
474 | wrf_l_thermals,' differs from iflag_thermals= ',lth ,' in physiq.def !!!!' |
---|
475 | WRITE(wrf_err_message,*)' wrong namelist.input value !!' |
---|
476 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
477 | END IF |
---|
478 | IF (wrf_l_wake /= lwake) THEN |
---|
479 | PRINT *,TRIM(errmsg) |
---|
480 | PRINT *,' ' // TRIM(subname) // ' namelist LMDZ wakes value: ', & |
---|
481 | wrf_l_wake,' differs from iflag_wake= ',lwake ,' in physiq.def !!!!' |
---|
482 | WRITE(wrf_err_message,*)' wrong namelist.input value !!' |
---|
483 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
484 | END IF |
---|
485 | |
---|
486 | ! Initialization of the variables |
---|
487 | !! |
---|
488 | |
---|
489 | INQUIRE(FILE='traceur.def', EXIST=existsfile) |
---|
490 | |
---|
491 | ! L. Fita, LMD. August, this would be much more nice if it is in config_flags structure.... |
---|
492 | IF (existsfile) THEN |
---|
493 | DO funit=10,100 |
---|
494 | INQUIRE(UNIT=funit, OPENED=is_used) |
---|
495 | IF (.NOT. is_used) EXIT |
---|
496 | END DO |
---|
497 | OPEN(UNIT=funit, FILE='traceur.def', STATUS='OLD') |
---|
498 | READ(funit,*)lmdzmixingratios |
---|
499 | CLOSE(UNIT=funit) |
---|
500 | ELSE |
---|
501 | WRITE(message, *)errmsg |
---|
502 | CALL wrf_debug(75, message) |
---|
503 | WRITE(wrf_err_message,*)' required file traceur.def not found !!' |
---|
504 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
505 | END IF |
---|
506 | |
---|
507 | CALL infotrac_init |
---|
508 | |
---|
509 | ! Initializing LMDZ matrices... |
---|
510 | |
---|
511 | CALL Init_Phys_lmdz(1,ddimxy,dimz,1,(/ddimxy/)) |
---|
512 | CALL InitComgeomphy() |
---|
513 | |
---|
514 | CALL phys_state_var_init(0) |
---|
515 | !! CALL neige_initialize() |
---|
516 | !! CALL limit_initialize() |
---|
517 | |
---|
518 | !! CALL pbl_initialize() |
---|
519 | |
---|
520 | PRINT *,'Lluis after initializing all LMDZ!' |
---|
521 | |
---|
522 | rlon=LonValues |
---|
523 | rlat=LatValues |
---|
524 | |
---|
525 | xtime0: IF (wrf_xtime == 0.) THEN |
---|
526 | |
---|
527 | nlanduse=UBOUND(wrf_grid%landusef, 2) |
---|
528 | CALL WRFlanduse_LMDZKsoil(landcat,wims,wime,wjms,wjme,ddimx,ddimy,nlanduse, & |
---|
529 | wrf_grid%landusef,wrf_grid%landmask,wrf_grid%lter,wrf_grid%llic, & |
---|
530 | wrf_grid%loce,wrf_grid%lsic) |
---|
531 | |
---|
532 | ! LANDMASK in LMDZ as fractions |
---|
533 | wrf_grid%lmsk = wrf_grid%lter + wrf_grid%llic |
---|
534 | ! Pseudo WRF-initialization |
---|
535 | |
---|
536 | ! LANDMASK in LMDZ as 1/0 |
---|
537 | ! wrf_grid%lmsk=0. |
---|
538 | ! DO ix=1,ddimx |
---|
539 | ! DO iy=1,ddimy |
---|
540 | ! IF (wrf_grid%lter(ix,iy) >= 0.5) THEN |
---|
541 | ! wrf_grid%lmsk(ix,iy)=1. |
---|
542 | ! wrf_grid%lter(ix,iy)=1. |
---|
543 | ! wrf_grid%llic(ix,iy)=0. |
---|
544 | ! wrf_grid%loce(ix,iy)=0. |
---|
545 | ! wrf_grid%lsic(ix,iy)=0. |
---|
546 | ! ELSE |
---|
547 | ! wrf_grid%lmsk(ix,iy)=0. |
---|
548 | ! wrf_grid%lter(ix,iy)=0. |
---|
549 | ! wrf_grid%llic(ix,iy)=0. |
---|
550 | ! wrf_grid%loce(ix,iy)=1. |
---|
551 | ! wrf_grid%lsic(ix,iy)=0. |
---|
552 | ! END IF |
---|
553 | ! END DO |
---|
554 | ! END DO |
---|
555 | ! End of Pseudo WRF-initialization |
---|
556 | !!!!! |
---|
557 | |
---|
558 | ! Value is given at the first time-step, not any more, since it will be continuously |
---|
559 | ! used by LMDZ |
---|
560 | ! l. Fita, LMD. January 2014 |
---|
561 | ! This should be in this way, but, because we can not use any scheme DZS=0., so |
---|
562 | ! direct met_em values (Registry modified) are used. soil layers are in [cm]! |
---|
563 | ! DO iz=1,SIZE(wrf_grid%soil_layers(ip,:,jp)) |
---|
564 | ! wrf_grid%lwsol = wrf_grid%lwsol + wrf_grid%sm(:,iz,:)* & |
---|
565 | ! wrf_grid%soil_layers(:,iz,:)/100. |
---|
566 | ! END DO |
---|
567 | DO iz=1,4 |
---|
568 | wrf_grid%ltksoil(:,iz,:)=wrf_grid%st(:,1,:) |
---|
569 | END DO |
---|
570 | ! |
---|
571 | ! Only using SST on that ocean grid points |
---|
572 | DO ix=1,ddimx |
---|
573 | DO iy=1,ddimy |
---|
574 | IF (wrf_grid%loce(ix,iy) > 0.) THEN |
---|
575 | ! Full SST grid points must have a SST value from the wrfinput (WRF 1/0 landmask) |
---|
576 | ! but that LMDZ points with fractions of land/mask could not. Using the closest one |
---|
577 | ! if it is an isolated grid point, using TSK instead |
---|
578 | IF (wrf_grid%sst(ix,iy) < 200.15) THEN |
---|
579 | wrf_grid%ltksoil(ix,3,iy) = -9. |
---|
580 | IF ( (ix > 1).AND.(ix < ddimx) .AND. (iy > 1).AND.(iy < ddimy) ) THEN |
---|
581 | DO ixx=-1,1 |
---|
582 | DO iyy=-1,1 |
---|
583 | ! PRINT *,ixx,iyy,wrf_grid%sst(ix+ixx,iy+iyy) |
---|
584 | IF (wrf_grid%sst(ix+ixx,iy+iyy) > 200.15) THEN |
---|
585 | wrf_grid%ltksoil(ix,3,iy) = wrf_grid%sst(ix+ixx,iy+iyy) |
---|
586 | EXIT |
---|
587 | END IF |
---|
588 | END DO |
---|
589 | IF ( wrf_grid%ltksoil(ix,3,iy) > 200.15) EXIT |
---|
590 | END DO |
---|
591 | IF ( wrf_grid%ltksoil(ix,3,iy) == -9.) wrf_grid%ltksoil(ix,3,iy) = & |
---|
592 | wrf_grid%tsk(ix,iy) |
---|
593 | ELSE |
---|
594 | wrf_grid%ltksoil(ix,3,iy) = wrf_grid%tsk(ix,iy) |
---|
595 | END IF |
---|
596 | ELSE |
---|
597 | wrf_grid%ltksoil(ix,3,iy) = wrf_grid%sst(ix,iy) |
---|
598 | END IF |
---|
599 | IF ( (wrf_grid%ltksoil(ix,3,iy) < 200.15) .OR. & |
---|
600 | (wrf_grid%ltksoil(ix,3,iy) > 370.) ) THEN |
---|
601 | PRINT *,TRIM(errmsg) |
---|
602 | WRITE(wrf_err_message,*) ' ' // TRIM(subname) // & |
---|
603 | ' SST inconsistency at point: ', ix, ', ', iy,' with loce: ', & |
---|
604 | wrf_grid%loce(ix,iy),' has a tsoil(oce)= ', & |
---|
605 | wrf_grid%ltksoil(ix,3,iy),' sst: ',wrf_grid%sst(ix,iy),' tsk: ', & |
---|
606 | wrf_grid%tsk(ix,iy) |
---|
607 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
608 | END IF |
---|
609 | END IF |
---|
610 | END DO |
---|
611 | END DO |
---|
612 | |
---|
613 | !! Soil temperature, humidity, water-content... |
---|
614 | ! This should go on the namelist... later! |
---|
615 | ORCHIDEElevels = (/ 0.098, 0.1955, 0.5865, 1.3685, 2.9326, 6.0606, 12.3167, & |
---|
616 | 24.8289, 49.8534, 99.9022, 200. /) |
---|
617 | |
---|
618 | datasetname = soilcat |
---|
619 | tablename = 'SOILPARM.TBL' |
---|
620 | |
---|
621 | PRINT *,' Lluis reading dataset "' // TRIM(datasetname) // '" from "' // & |
---|
622 | TRIM(tablename) // '"' |
---|
623 | |
---|
624 | CALL table_characteristics(datasetname,tablename,begdataset,Nvars,Nrs,Ncs) |
---|
625 | |
---|
626 | ! L. Fita, LMD. Feburary 2014 |
---|
627 | ! Again (as in the landuses case), the files content more categeories that the really ones used by the model... |
---|
628 | Nsoillayers=SIZE(wrf_grid%soil_layers(ip,:,jp)) |
---|
629 | Nwrfsoiltypes=SIZE(wrf_grid%soilctop(ip,:,jp)) |
---|
630 | IF (Nrs > Nwrfsoiltypes) THEN |
---|
631 | PRINT *,TRIM(wrnmsg) |
---|
632 | PRINT *," '" // TRIM(datasetname)//"' from '"//TRIM(tablename)//"' has ", & |
---|
633 | Nrs,' soil layers, meanwhile WRF data has ',Nwrfsoiltypes |
---|
634 | PRINT *,' using only the first ', Nwrfsoiltypes, ' of the dataset !!!!' |
---|
635 | Nrs=Nsoillayers |
---|
636 | ELSE IF (Nrs < Nwrfsoiltypes) THEN |
---|
637 | PRINT *,TRIM(errmsg) |
---|
638 | PRINT *," '" // TRIM(datasetname)//"' from '"//TRIM(tablename)//"' has ", & |
---|
639 | Nrs,' soil layers, meanwhile WRF data has ',Nwrfsoiltypes |
---|
640 | WRITE(wrf_err_message,*)' wrong the dataset !!!!' |
---|
641 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
642 | END IF |
---|
643 | |
---|
644 | IF (ALLOCATED(soilvals)) DEALLOCATE(soilvals) |
---|
645 | ALLOCATE(soilvals(Nvars,Nrs,Ncs)) |
---|
646 | |
---|
647 | IF (ALLOCATED(soilvalns)) DEALLOCATE(soilvalns) |
---|
648 | ALLOCATE(soilvalns(Nrs)) |
---|
649 | |
---|
650 | CALL read_table(datasetname, tablename, begdataset, Nvars, Nrs, Ncs, & |
---|
651 | soilvals, soilvalns) |
---|
652 | |
---|
653 | DO ix=1,ddimx |
---|
654 | DO iy=1,ddimy |
---|
655 | !L. Fita, LMD. January 2014 Soil layers are in cm! |
---|
656 | |
---|
657 | |
---|
658 | ! NOTE: wrf_dx, wrf_dy should be matrix !!! |
---|
659 | CALL compute_TOTsoil_mass_water_values(datasetname, Nvars, Nrs, Ncs, & |
---|
660 | soilvals, soilvalns, ix, iy, Nrs, wrf_grid%soilctop(ix,:,iy), & |
---|
661 | wrf_grid%soilcbot(ix,:,iy), Nsoillayers, wrf_grid%sm(ix,:,iy), & |
---|
662 | wrf_grid%soil_layers(ix,Nsoillayers:1:-1,iy)/100., wrf_dx, wrf_dy, & |
---|
663 | soilTmass, wrf_grid%lwsol(ix,iy)) |
---|
664 | |
---|
665 | wrf_grid%lwsol(ix,iy) = wrf_grid%lwsol(ix,iy)/(wrf_dx*wrf_dy*1000.) |
---|
666 | |
---|
667 | CALL interpolate_layers(SIZE(wrf_grid%soil_layers(ix,:,iy)), & |
---|
668 | wrf_grid%soil_layers(ix,SIZE(wrf_grid%soil_layers(ix,:,iy)):1:-1,iy), & |
---|
669 | wrf_grid%st(ix,:,iy),11, ORCHIDEElevels,wrf_grid%lotter(ix,:,iy)) |
---|
670 | END DO |
---|
671 | END DO |
---|
672 | |
---|
673 | wrf_grid%lotlic=wrf_grid%lotter |
---|
674 | wrf_grid%lotoce=wrf_grid%lotter |
---|
675 | wrf_grid%lotsic=wrf_grid%lotter |
---|
676 | |
---|
677 | DEALLOCATE(soilvals) |
---|
678 | DEALLOCATE(soilvalns) |
---|
679 | |
---|
680 | ! LMDZ does not distinguish among species, use it as a whole |
---|
681 | wrf_grid%lclwcon=SUM(wrf_MOIST,4) |
---|
682 | DO ix=wims,wime |
---|
683 | DO iz=wkms,wkme |
---|
684 | DO iy=wjms,wjme |
---|
685 | IF (wrf_grid%lclwcon(ix,iz,iy) /= 0.) THEN |
---|
686 | wrf_grid%lratqs=(wrf_MOIST(ix,iz,iy,wrf_qrid)+ & |
---|
687 | wrf_MOIST(ix,iz,iy,wrf_qsid)+wrf_MOIST(ix,iz,iy,wrf_qiid)+ & |
---|
688 | wrf_MOIST(ix,iz,iy,wrf_qhid)+wrf_MOIST(ix,iz,iy,wrf_qgid))/ & |
---|
689 | wrf_grid%lclwcon(ix,iz,iy) |
---|
690 | END IF |
---|
691 | END DO |
---|
692 | END DO |
---|
693 | END DO |
---|
694 | |
---|
695 | ! wrf_grid%znt = wrf_grid%z0 |
---|
696 | ! wrf_grid%albedo = wrf_grid%albbck |
---|
697 | wrf_grid%lbils=0. |
---|
698 | wrf_grid%lfder=0. |
---|
699 | wrf_grid%lrnebcon=0. |
---|
700 | DO ix=1,ddimx |
---|
701 | DO iy=1,ddimy |
---|
702 | ksoils = (/ wrf_grid%lter(ix,iy), wrf_grid%llic(ix,iy), & |
---|
703 | wrf_grid%loce(ix,iy), wrf_grid%lsic(ix,iy) /) |
---|
704 | ksoilmax = MAXVAL(ksoils) |
---|
705 | DO iz = 1,4 |
---|
706 | IF (ksoilmax == ksoils(iz)) wrf_grid%lnat(ix,iy) = iz |
---|
707 | END DO |
---|
708 | END DO |
---|
709 | END DO |
---|
710 | wrf_grid%lrads = wrf_grid%swdown |
---|
711 | |
---|
712 | wrf_grid%lcontrol(1) = wtime_step |
---|
713 | defilen = 'config.def' |
---|
714 | defvarn = 'nbapp_rad' |
---|
715 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
716 | wrf_grid%lcontrol(6) = defint |
---|
717 | wrf_grid%lcontrol(2) = NINT (86400./wtime_step/ FLOAT(defint) ) |
---|
718 | !L. Fita, LMD. February 2014: current value of atmospheric CO2 should be |
---|
719 | !! co2_ppm0 + delta_co2_ppm, from 'carbon_cycle_mod.F90' |
---|
720 | defvarn = 'co2_ppm' |
---|
721 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
722 | wrf_grid%lcontrol(3) = defint |
---|
723 | !!c co2_ppm0 : initial value of atmospheric CO2 |
---|
724 | wrf_grid%lcontrol(16) = defint |
---|
725 | defvarn = 'solaire' |
---|
726 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
727 | wrf_grid%lcontrol(4) = defreal |
---|
728 | wrf_grid%lcontrol(5) = wrf_l_con |
---|
729 | |
---|
730 | ! Default value cycle_diurne = .T. |
---|
731 | wrf_grid%lcontrol(7) = 1. |
---|
732 | defvarn = 'soil_model' |
---|
733 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
734 | IF(defbool) wrf_grid%lcontrol(8) = 1. |
---|
735 | defilen = 'physiq.def' |
---|
736 | defvarn = 'new_oliq' |
---|
737 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
738 | IF(defbool) wrf_grid%lcontrol(9) = 1. |
---|
739 | defvarn = 'ok_orodr' |
---|
740 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
741 | IF(defbool) wrf_grid%lcontrol(10) = 1. |
---|
742 | defvarn = 'ok_orolf' |
---|
743 | CALL def_get_scalar_value(defilen, defvarn, defstr, defint, defreal, defbool) |
---|
744 | IF(defbool) wrf_grid%lcontrol(11) = 1. |
---|
745 | |
---|
746 | wrf_grid%lcontrol(13) = dayref + nday |
---|
747 | wrf_grid%lcontrol(14) = annee_ref |
---|
748 | wrf_grid%lcontrol(15) = wrf_grid%itimestep |
---|
749 | |
---|
750 | ! Let's split rugosity by Ksoils |
---|
751 | !! Static roughness length |
---|
752 | wrf_grid%lrug=wrf_grid%znt |
---|
753 | |
---|
754 | !! Dynamic roughness length (It should work if we use WRF schemes...) |
---|
755 | ! wrf_grid%lrug=wrf_grid%znt |
---|
756 | ! First split by Ksoil types. |
---|
757 | ! NOTE: in somehow we should read again the table 'VEGPARM.TBL' and recompute the |
---|
758 | ! roughness length in case that appear a new soil type. (but what left below a |
---|
759 | ! melted glacier?) |
---|
760 | ! |
---|
761 | LMDZvarmethod='prod' |
---|
762 | wrf_grid%lrugksoil(:,1,:) = wrf_grid%znt |
---|
763 | |
---|
764 | CALL lmdz_varKsoil(wims,wime,wjms,wjme,dimx,dimy,wbdyw,wrf_grid%snow, & |
---|
765 | LMDZvarmethod,wrf_grid%lter,wrf_grid%llic,wrf_grid%loce,wrf_grid%lsic, & |
---|
766 | wrf_grid%lsnowksoil(:,1,:),wrf_grid%lsnowksoil(:,2,:), & |
---|
767 | wrf_grid%lsnowksoil(:,3,:),wrf_grid%lsnowksoil(:,4,:)) |
---|
768 | ! All the iced soil types have the same roughtness length 0.001 |
---|
769 | wrf_grid%lrugksoil(:,2,:)=0.001 |
---|
770 | wrf_grid%lrugksoil(:,3,:)=0.0001 |
---|
771 | wrf_grid%lrugksoil(:,4,:)=0.001 |
---|
772 | |
---|
773 | ! Recomputig again the total roughness length |
---|
774 | CALL wrf_varKsoil(wims,wime,wjms,wjme,dimx,dimy,wbdyw,LMDZvarmethod, & |
---|
775 | wrf_grid%lter,wrf_grid%llic,wrf_grid%loce,wrf_grid%lsic, & |
---|
776 | wrf_grid%lrugksoil(:,1,:),wrf_grid%lrugksoil(:,2,:), & |
---|
777 | wrf_grid%lrugksoil(:,3,:),wrf_grid%lrugksoil(:,4,:),wrf_grid%lrug) |
---|
778 | |
---|
779 | ! Air surface moisture for each soil type. First order? |
---|
780 | DO iz=1,4 |
---|
781 | wrf_grid%lqksoil(:,iz,:)=wrf_grid%q2 |
---|
782 | END DO |
---|
783 | |
---|
784 | ! Let's split albedo by Ksoils |
---|
785 | wrf_grid%lalbksoil=0. |
---|
786 | |
---|
787 | DO iz=1,4 |
---|
788 | !! Static roughness length (changing on time in wrflwbdy_d01) |
---|
789 | wrf_grid%lalbksoil(:,iz,:)=wrf_grid%albedo |
---|
790 | !! Dynamic roughness length (It should work if we use WRF schemes...) |
---|
791 | ! wrf_grid%lalbksoil(:,iz,:)=wrf_grid%albedo |
---|
792 | END DO |
---|
793 | ! First split by Ksoil types. |
---|
794 | ! NOTE: in somehow we should read again the table 'VEGPARM.TBL' and recompute the |
---|
795 | ! albedo in case that appear a new soil type. (but what left below a melted |
---|
796 | ! glacier?) |
---|
797 | ! |
---|
798 | ! All the iced soil types have the same albedo |
---|
799 | ! For snow/ice there is zmin=0.55, zmax=0.70, tacking the mean value: 0.625 |
---|
800 | wrf_grid%lalbksoil(:,2,:)=0.625 |
---|
801 | wrf_grid%lalbksoil(:,3,:)=0.08 |
---|
802 | wrf_grid%lalbksoil(:,4,:)=0.625 |
---|
803 | |
---|
804 | ! Recomputig again the total roughness length |
---|
805 | CALL wrf_varKsoil(wims,wime,wjms,wjme,dimx,dimy,wbdyw,LMDZvarmethod, & |
---|
806 | wrf_grid%lter,wrf_grid%llic,wrf_grid%loce,wrf_grid%lsic, & |
---|
807 | wrf_grid%lalbksoil(:,1,:),wrf_grid%lalbksoil(:,2,:), & |
---|
808 | wrf_grid%lalbksoil(:,3,:),wrf_grid%lalbksoil(:,4,:),wrf_grid%albedo) |
---|
809 | ! Using the same values for the LW albedo |
---|
810 | wrf_grid%llwalbksoil = wrf_grid%lalbksoil |
---|
811 | |
---|
812 | ! Orography values just beacuse there is no other way right now (they should come |
---|
813 | ! from geogrid.exe) |
---|
814 | wrf_grid%lzmea = wrf_grid%ht |
---|
815 | wrf_grid%lzstd = wrf_grid%topostdv |
---|
816 | wrf_grid%lzsig = wrf_grid%slope |
---|
817 | wrf_grid%lzgam = SQRT((wrf_grid%toposlpx**2. + wrf_grid%toposlpy**2.))/ & |
---|
818 | (1. + wrf_grid%slope) |
---|
819 | wrf_grid%lzthe = ACOS(wrf_grid%toposlpx/SQRT(wrf_grid%toposlpx**2. + & |
---|
820 | wrf_grid%toposlpy**2.)) |
---|
821 | wrf_grid%lzpic = wrf_grid%ht*1.10 |
---|
822 | wrf_grid%lzval = wrf_grid%ht*0.90 |
---|
823 | wrf_grid%lzrugsrel = wrf_grid%lrugKsoil(:,1,:) |
---|
824 | |
---|
825 | ! R = 8.3144621 ([J mol/K] http://en.wikipedia.org/wiki/Gas_constant) |
---|
826 | ! mu = 28.97 (Molecular Mass of Air [kg/kmol] from http://www.engineeringtoolbox.com/molecular-mass-air-d_679.html) |
---|
827 | ! R / mu =? r_d |
---|
828 | |
---|
829 | ! lmdz_Area = dLon * dLat * cos(lat) * Earth_rad |
---|
830 | |
---|
831 | END IF xtime0 |
---|
832 | |
---|
833 | ! Grids do not start/end at the same index |
---|
834 | wrf_area = 0. |
---|
835 | wrf_cu = 0. |
---|
836 | wrf_cv = 0. |
---|
837 | DO iy=1,ddimy |
---|
838 | DO ix=1,ddimx |
---|
839 | wrf_area(ix,iy) = wrf_dx*wrf_dy/wrf_mapft(ix,iy) |
---|
840 | wrf_cu(ix,iy) = wrf_dx/wrf_mapfu(ix,iy) |
---|
841 | wrf_cv(ix,iy) = wrf_dy/wrf_mapfv(ix,iy) |
---|
842 | END DO |
---|
843 | END DO |
---|
844 | |
---|
845 | ! cu = dLon * Earth_rad |
---|
846 | ! cv = dLat * Earth_rad * cos(Lat) |
---|
847 | |
---|
848 | ! lmdz_cu(1) = cu(1) |
---|
849 | ! lmdz_cv(1) = cv(1) |
---|
850 | ! DO j=2,dimy |
---|
851 | ! DO i=1,dimx |
---|
852 | ! lmdz_cu((j-2)*dimx+1+i) = cu((j-1)*(dimx+1)+i) |
---|
853 | ! lmdz_cv((j-2)*dimx+1+i) = cv((j-1)*(dimx+1)+i) |
---|
854 | ! ENDDO |
---|
855 | ! ENDDO |
---|
856 | ! lmdz_cu(dim_ngridmx) = cu(dimxy+1) |
---|
857 | ! lmdz_cv(dim_ngridmx) = cv(dimxy-dimx) |
---|
858 | |
---|
859 | AreaValues = RESHAPE(wrf_area, (/ ddimx*ddimy/), ORDER=(/1/)) |
---|
860 | CUValues = RESHAPE(wrf_cu, (/ ddimx*ddimy/), ORDER=(/1/)) |
---|
861 | CVValues = RESHAPE(wrf_cv, (/ ddimx*ddimy/), ORDER=(/1/)) |
---|
862 | |
---|
863 | CALL lmdz_vars_init(ddimxy) |
---|
864 | |
---|
865 | CALL load_lmdz(wrf_grid,ddimx,ddimy,dimz,wbdyw,ddimxy,4,11,rlon,rlat,zmasq, & |
---|
866 | pctsrf,ftsol,ftsoil_rst,qsurf_rst,qsol_rst,falb1,falb2,evap_rst,snow_rst, & |
---|
867 | radsol,solsw,sollw,fder_rst,rain_fall,snow_fall,agesno_rst,zmea,zstd,zgam, & |
---|
868 | zthe,zpic,zval,rugoro,rugos_rst,restart_runoff,zmax0,f0,wake_s,wake_cstar, & |
---|
869 | wake_pe,wake_fip,sst,albedo,t_ancien,q_ancien,u_ancien,v_ancien,clwcon, & |
---|
870 | rnebcon,ratqs,ema_work1,ema_work2,wake_deltat,wake_deltaq,fm_therm, & |
---|
871 | entr_therm,detr_therm,phy_glo) |
---|
872 | |
---|
873 | CALL pbl_surface_init(qsol_rst, fder_rst, snow_rst, qsurf_rst, evap_rst, & |
---|
874 | rugos_rst, agesno_rst, ftsoil_rst) |
---|
875 | CALL fonte_neige_init(restart_runoff) |
---|
876 | |
---|
877 | DO ix=1,ddimx |
---|
878 | DO iy=1,ddimy |
---|
879 | ixy=ddimx*(iy-1)+ix |
---|
880 | IF (wrf_grid%lter(ix,iy) /= pctsrf(ixy,1)) PRINT *,' ' // & |
---|
881 | TRIM(subname) // ' ter DOES NOT COINCIDE! ', ix,', ',iy,' lter: ', & |
---|
882 | wrf_grid%lter(ix,iy),' pctsrf: ',pctsrf(ixy,1) |
---|
883 | IF (wrf_grid%llic(ix,iy) /= pctsrf(ixy,2)) PRINT *,' ' // & |
---|
884 | TRIM(subname) // ' lic DOES NOT COINCIDE! ', ix,', ',iy,' llic: ', & |
---|
885 | wrf_grid%llic(ix,iy),' pctsrf: ',pctsrf(ixy,2) |
---|
886 | IF (wrf_grid%loce(ix,iy) /= pctsrf(ixy,3)) PRINT *,' ' // & |
---|
887 | TRIM(subname) // ' oce DOES NOT COINCIDE! ', ix,', ',iy,' loce: ', & |
---|
888 | wrf_grid%loce(ix,iy),' pctsrf: ',pctsrf(ixy,3) |
---|
889 | IF (wrf_grid%lsic(ix,iy) /= pctsrf(ixy,4)) PRINT *,' ' // & |
---|
890 | TRIM(subname) // ' sic DOES NOT COINCIDE! ', ix,', ',iy,' lsic: ', & |
---|
891 | wrf_grid%lsic(ix,iy),' pctsrf: ',pctsrf(ixy,4) |
---|
892 | END DO |
---|
893 | END DO |
---|
894 | |
---|
895 | CALL NOread_limit_init(ddimxy, klon_glo) |
---|
896 | |
---|
897 | sst_glo = sst(1:ddimxy) |
---|
898 | ! In ocean_forced_mod is used as tsurf_limit = sst(knindex(1:knon)) |
---|
899 | tsurf_limit = ftsol(:,3) |
---|
900 | |
---|
901 | ! In surf_land_bucket_mod is used as z0_new=rugos(knindex(1:knon),1) [z0_new == z0_limit] |
---|
902 | z0_limit = rugos_rst(:,1) |
---|
903 | alb_limit = albedo |
---|
904 | |
---|
905 | rug_glo = rugos_rst(:,is_ter) |
---|
906 | pct_glo(klon_glo,:) = pctsrf(klon_glo,:) |
---|
907 | |
---|
908 | ! It is not clear how to deal with 'limit.nc' times... |
---|
909 | ! temps=wjulday |
---|
910 | |
---|
911 | CALL iniphysiq(ddimx*ddimy, dimz, 86400., wjulday, wtime_step, & |
---|
912 | & LatValues, LonValues, wrf_area, CUValues, CVValues, 1./reradius, g, r_d, cp, & |
---|
913 | & iflag_phys) |
---|
914 | |
---|
915 | ! NO NEED to do this, using wrfinput_d[nn], wrfbdy_d[nn] and wrflowinput_d[nn] |
---|
916 | ! Checking for 'startphy.nc' presence |
---|
917 | !! INQUIRE(FILE='startphy.nc', EXIST=existsfile) |
---|
918 | !! IF (.NOT.existsfile) THEN |
---|
919 | !! WRITE(wrf_err_message,*)" file 'startphy.nc' with initial conditions " // & |
---|
920 | !! & ' for LMDZphys does not exist!!!!' |
---|
921 | !! CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
922 | !! END IF |
---|
923 | |
---|
924 | CALL init_ovars_lmdz_NOmodule(ddimxy,dimz,nbsrf) |
---|
925 | |
---|
926 | PRINT *,' Lluis: END of firststep !!!!!' |
---|
927 | END IF firststep |
---|
928 | |
---|
929 | ip=icheck_p |
---|
930 | jp=jcheck_p |
---|
931 | ! WRF alarms |
---|
932 | ! I can not print them !!!! |
---|
933 | !! |
---|
934 | ! wrf_grid%alarms => wrf_alarms |
---|
935 | ! PRINT *,' Lluis WRF alarms: time-step', wrf_grid%itimestep,' _______' |
---|
936 | ! DO ix=1,3*INT(MAX_WRF_ALARMS/3),3 |
---|
937 | ! PRINT *,(ix+iy,': ',wrf_alarms(ix+iy), iy=0,2) |
---|
938 | ! END DO |
---|
939 | ! PRINT *,(iy,': ',wrf_alarms(iy), iy=3*INT(MAX_WRF_ALARMS/3)+1, MAX_WRF_ALARMS) |
---|
940 | |
---|
941 | ! What to do with this? |
---|
942 | !!! IF ( wrf_restart_alarm ) lmdz_lafin = .TRUE. |
---|
943 | |
---|
944 | INQUIRE(FILE='traceur.def', EXIST=existsfile) |
---|
945 | IF (existsfile) THEN |
---|
946 | DO funit=10,100 |
---|
947 | INQUIRE(UNIT=funit, OPENED=is_used) |
---|
948 | IF (.NOT. is_used) EXIT |
---|
949 | END DO |
---|
950 | OPEN(UNIT=10, FILE='traceur.def', STATUS='OLD') |
---|
951 | READ(10,*)lmdzmixingratios |
---|
952 | CLOSE(UNIT=10) |
---|
953 | ELSE |
---|
954 | |
---|
955 | WRITE(message, *)errmsg |
---|
956 | CALL wrf_debug(75, message) |
---|
957 | WRITE(wrf_err_message,*)' required file traceur.def not found !!' |
---|
958 | CALL wrf_error_fatal(TRIM(wrf_err_message)) |
---|
959 | END IF |
---|
960 | |
---|
961 | ! Regarding if it is a lowbdy input time |
---|
962 | !! |
---|
963 | PRINT *,' ',wrf_grid%itimestep,' wrf_islowbdyin: ',wrf_islowbdyin |
---|
964 | ! IF ((wrf_islowbdyin) .AND. .NOT.wrf_restart_alarm) THEN |
---|
965 | IF ((wrf_islowbdyin)) THEN |
---|
966 | PRINT *,' LOWBDY time-step!!!!!!! ' |
---|
967 | PRINT *,' before: wsst ', wrf_grid%sst(ip,jp),' lsst: ',sst(lp) |
---|
968 | CALL get_lowbdy(ddimx, ddimy, dimz, wbdyw, ddimxy, 4, 11, klon_glo, & |
---|
969 | wrf_grid, pctsrf, ftsol, rugos_rst, albedo, sst, tsurf_limit, z0_limit, & |
---|
970 | alb_limit, rug_glo, pct_glo) |
---|
971 | PRINT *,' after: wsst ', wrf_grid%sst(ip,jp),' lsst: ',sst(lp) |
---|
972 | ! STOP |
---|
973 | END IF |
---|
974 | |
---|
975 | IF (ALLOCATED(MixingRatioValues)) DEALLOCATE(MixingRatioValues) |
---|
976 | ALLOCATE(MixingRatioValues(ddimxy,dimz,lmdzmixingratios), STAT=ierr) |
---|
977 | IF (ierr /= 0) THEN |
---|
978 | PRINT *,errmsg |
---|
979 | PRINT *,' ' // subname // ': Problem allocating WRF moisture array!', ierr |
---|
980 | END IF |
---|
981 | |
---|
982 | IF (ALLOCATED(MixingRatiotendValues)) DEALLOCATE(MixingRatiotendValues) |
---|
983 | ALLOCATE(MixingRatiotendValues(ddimxy,dimz,lmdzmixingratios)) |
---|
984 | |
---|
985 | ! Transforming from WRF theta temperature to LMDZ temperature (in K) |
---|
986 | !! |
---|
987 | wrf_P = wrf_baseP + wrf_perP |
---|
988 | wrf_geopot = wrf_basegeopot + wrf_pergeopot |
---|
989 | wrf_geopot_half(:,wkms:wkme-1,:) = ( wrf_geopot(:,wkms:wkme-1,:) + & |
---|
990 | wrf_geopot(:,wkms+1:wkme,:))/2. |
---|
991 | wrf_sfcgeopot = wrf_grid%ht*g |
---|
992 | ! de-staggering winds |
---|
993 | !! |
---|
994 | |
---|
995 | wrfUdestagg(wims:wime-1,:,wjms:wjme-1) = (wrf_U(wims:wime-1,:,wjms:wjme-1) + & |
---|
996 | wrf_U(wims+1:wime,:,wjms:wjme-1))/2. |
---|
997 | wrfVdestagg(wims:wime-1,:,wjms:wjme-1) = (wrf_V(wims:wime-1,:,wjms:wjme-1) + & |
---|
998 | wrf_V(wims:wime-1,:,wjms+1:wjme))/2. |
---|
999 | wrfUtenddestagg(wims:wime-1,:,wjms:wjme-1) = & |
---|
1000 | (wrf_Utend(wims:wime-1,:,wjms:wjme-1) + wrf_Utend(wims+1:wime,:,wjms:wjme-1))/2. |
---|
1001 | wrfVtenddestagg(wims:wime-1,:,wjms:wjme-1) = & |
---|
1002 | (wrf_Vtend(wims:wime-1,:,wjms:wjme-1) + wrf_Vtend(wims:wime-1,:,wjms+1:wjme))/2. |
---|
1003 | |
---|
1004 | !! NO de-stagger in z |
---|
1005 | !! wrfWValues = (wrf_w(:,wkms:wkme-1,:)+wrf_w(:,wkms+1:wkme,:))/2. |
---|
1006 | !! wrfPERMASSValues = (wrf_permass(:,wkms:wkme-1,:)+wrf_permass(:,wkms+1:wkme,:))/2. |
---|
1007 | !! DO k=wkms,wkme |
---|
1008 | !! wrfMASSValues(:,k,:)=-(wrfPERMASSVAlues(:,k,:)+wrf_basemass)*wrf_dfulleta(k)/g |
---|
1009 | !! END DO |
---|
1010 | wrfWValues=wrf_w |
---|
1011 | DO iz=wkms,wkme |
---|
1012 | wrfMASSValues(:,iz,:) = -(wrf_permass+wrf_basemass)*wrf_dfulleta(iz)/g |
---|
1013 | END DO |
---|
1014 | wrfZFluxMassValues=wrfWValues*wrfMASSValues |
---|
1015 | |
---|
1016 | !! CALL theta_to_temp(THETAVALUES=wrf_T, PRESSVALUES=wrf_P, TEMPVALUES=wrf_Temp & |
---|
1017 | !! ! Dimension arguments |
---|
1018 | !! & ,IDS=wids,IDE=wide, JDS=wjds,JDE=wjde, KDS=wkds,KDE=wkde & |
---|
1019 | !! & ,IMS=wims,IME=wime, JMS=wjms,JME=wjme, KMS=wkms,KME=wkme & |
---|
1020 | !! & ,IPS=wips,IPE=wipe, JPS=wjps,JPE=wjpe, KPS=wkps,KPE=wkpe & |
---|
1021 | !! & ,I_START=wi_start,I_END=wi_end & |
---|
1022 | !! & ,J_START=wj_start,J_END=wj_end & |
---|
1023 | !! & ,KTS=wkts, KTE=wkte & |
---|
1024 | !! & ,NUM_TILES=wnum_tiles & |
---|
1025 | !! & ) |
---|
1026 | |
---|
1027 | CALL theta_to_temp(wrf_T, wrf_P, wrf_Temp & |
---|
1028 | ! Dimension arguments |
---|
1029 | & ,wids,wide, wjds,wjde, wkds,wkde & |
---|
1030 | & ,wims,wime, wjms,wjme, wkms,wkme & |
---|
1031 | & ,wips,wipe, wjps,wjpe, wkps,wkpe & |
---|
1032 | & ,wi_start,wi_end & |
---|
1033 | & ,wj_start,wj_end & |
---|
1034 | & ,wkts, wkte & |
---|
1035 | & ,wnum_tiles & |
---|
1036 | & ) |
---|
1037 | |
---|
1038 | !! CALL theta_to_temp(THETAVALUES=wrf_Ttend, PRESSVALUES=wrf_P, & |
---|
1039 | !! & TEMPVALUES=wrf_Temptend & |
---|
1040 | !! ! Dimension arguments |
---|
1041 | !! & ,IDS=wids,IDE=wide, JDS=wjds,JDE=wjde, KDS=wkds,KDE=wkde & |
---|
1042 | !! & ,IMS=wims,IME=wime, JMS=wjms,JME=wjme, KMS=wkms,KME=wkme & |
---|
1043 | !! & ,IPS=wips,IPE=wipe, JPS=wjps,JPE=wjpe, KPS=wkps,KPE=wkpe & |
---|
1044 | !! & ,I_START=wi_start,I_END=wi_end & |
---|
1045 | !! & ,J_START=wj_start,J_END=wj_end & |
---|
1046 | !! & ,KTS=wkts, KTE=wkte & |
---|
1047 | !! & ,NUM_TILES=wnum_tiles & |
---|
1048 | !! & ) |
---|
1049 | |
---|
1050 | CALL theta_to_temp(wrf_Ttend, wrf_P, wrf_Temptend & |
---|
1051 | ! Dimension arguments |
---|
1052 | & ,wids,wide, wjds,wjde, wkds,wkde & |
---|
1053 | & ,wims,wime, wjms,wjme, wkms,wkme & |
---|
1054 | & ,wips,wipe, wjps,wjpe, wkps,wkpe & |
---|
1055 | & ,wi_start,wi_end & |
---|
1056 | & ,wj_start,wj_end & |
---|
1057 | & ,wkts, wkte & |
---|
1058 | & ,wnum_tiles & |
---|
1059 | & ) |
---|
1060 | |
---|
1061 | DO ix=1,ddimx |
---|
1062 | DO iy=1,ddimy |
---|
1063 | sfcGeopotValues(ddimx*(iy-1)+ix) = wrf_grid%ht(ix,iy)*g |
---|
1064 | END DO |
---|
1065 | END DO |
---|
1066 | |
---|
1067 | CALL mat_vect(wrf_Temp, dimx, dimy, dimz, wbdyw, TValues) |
---|
1068 | CALL mat_vect(wrf_Temptend, dimx, dimy, dimz, wbdyw, TtendValues) |
---|
1069 | CALL mat_vect(wrfUdestagg, dimx, dimy, dimz, wbdyw, UValues) |
---|
1070 | CALL mat_vect(wrfUtenddestagg, dimx, dimy, dimz, wbdyw, UtendValues) |
---|
1071 | CALL mat_vect(wrfVdestagg, dimx, dimy, dimz, wbdyw, VValues) |
---|
1072 | CALL mat_vect(wrfVtenddestagg, dimx, dimy, dimz, wbdyw, VtendValues) |
---|
1073 | ! CALL mat_vect(wrf_U, dimx, dimy, dimz, wbdyw, UValues) |
---|
1074 | ! CALL mat_vect(wrf_Utend, dimx, dimy, dimz, wbdyw, UtendValues) |
---|
1075 | ! CALL mat_vect(wrf_V, dimx, dimy, dimz, wbdyw, VValues) |
---|
1076 | ! CALL mat_vect(wrf_Vtend, dimx, dimy, dimz, wbdyw, VtendValues) |
---|
1077 | CALL mat_vect(wrf_P, dimx, dimy, dimz, wbdyw, HalfPressValues) |
---|
1078 | CALL mat_vect_zstagg(wrf_fullpres, dimx, dimy, dimz+1, wbdyw, FullPressValues) |
---|
1079 | CALL mat_vect(wrf_geopot_half, dimx, dimy, dimz, wbdyw, GeopotValues) |
---|
1080 | CALL mat_vect(wrfZFluxMassValues, dimx, dimy, dimz, wbdyw, WFluxMassValues) |
---|
1081 | |
---|
1082 | CALL WRFmoist_LMDZmoist(wrf_MOIST, dimx, dimy, dimz, wnum3dm, wbdyw, wrf_qvid, & |
---|
1083 | & wrf_qcid, wrf_qrid, lmdzmixingratios, MixingRatioValues) |
---|
1084 | |
---|
1085 | CALL WRFmoist_LMDZmoist(wrf_MOISTtend, dimx, dimy, dimz, wnum3dm, wbdyw, wrf_qvid,& |
---|
1086 | & wrf_qcid, wrf_qrid, lmdzmixingratios, MixingRatiotendValues) |
---|
1087 | |
---|
1088 | preff=100000. |
---|
1089 | CALL eta_to_pressure(wrf_halfeta, preff, wrf_Ptop, dimz, lmdzoutP) |
---|
1090 | ! L. Fita, LMD October 2014. LMDZ geopotential values are relative to the surface |
---|
1091 | DO iz=1, dimz |
---|
1092 | GeopotValues(:,iz) = GeopotValues(:,iz) - sfcGeopotValues(:) |
---|
1093 | END DO |
---|
1094 | |
---|
1095 | ! We need to provide values to these variables in order to make it works |
---|
1096 | presnivs=lmdzoutP |
---|
1097 | |
---|
1098 | ! Lluis Testing water species |
---|
1099 | ! MixingRatioValues(:,:,2)=MixingRatioValues(:,:,1)*0.2 |
---|
1100 | |
---|
1101 | IF (wrf_dbg >= 200) THEN |
---|
1102 | |
---|
1103 | !! Values at a given LMDZ matrix point |
---|
1104 | lmdzp=lp |
---|
1105 | jlmdz=INT(lmdzp/ddimx) + 1 |
---|
1106 | ilmdz=lmdzp-(jlmdz-1)*ddimx |
---|
1107 | !! Values at a given WRF 2D point |
---|
1108 | ! ilmdz=ip |
---|
1109 | ! jlmdz=jp |
---|
1110 | ! lmdzp=ddimx*(jlmdz-1)+ilmdz |
---|
1111 | |
---|
1112 | PRINT *,' WRF+LMDZ before LMDZ physiq lmdzp: ',lmdzp,' : ',ilmdz,jlmdz |
---|
1113 | PRINT *,'k wrf_T wrf_Temp TValues_______________' |
---|
1114 | DO iz=1,dimz |
---|
1115 | PRINT *,iz, wrf_T(ilmdz,iz,jlmdz), wrf_Temp(ilmdz,iz,jlmdz), TValues(lmdzp,iz) |
---|
1116 | END DO |
---|
1117 | PRINT *,'k wrf_U Uvalues wrf_V VValues _______________' |
---|
1118 | DO iz=1,dimz |
---|
1119 | PRINT *,iz, wrf_U(ilmdz,iz,jlmdz), UValues(lmdzp,iz), wrf_V(ilmdz,iz,jlmdz), & |
---|
1120 | VValues(lmdzp,iz) |
---|
1121 | END DO |
---|
1122 | PRINT *,'k wrf_fullpres FUllPressValues wrf_sfcgeopot hgt sfcGeopotValues______' |
---|
1123 | DO iz=1,dimz+1 |
---|
1124 | PRINT *,iz,wrf_fullpres(ilmdz,iz,jlmdz), FullPressValues(lmdzp,iz), & |
---|
1125 | wrf_sfcgeopot(ilmdz,jlmdz), wrf_grid%ht(ilmdz,jlmdz), sfcGeopotValues(lmdzp) |
---|
1126 | END DO |
---|
1127 | PRINT *,'k wrf_halfpress HalfPressValues wrf_Geopot GeopotValues lmdz outP ' //& |
---|
1128 | '_______________' |
---|
1129 | DO iz=1,dimz |
---|
1130 | PRINT *,iz, wrf_P(ilmdz,iz,jlmdz), HalfPressValues(lmdzp,iz), & |
---|
1131 | wrf_geopot(ilmdz,iz,jlmdz), GeopotValues(lmdzp,iz), lmdzoutP(iz) |
---|
1132 | END DO |
---|
1133 | PRINT *,'k wrf_MOIST MixingRatioValues _______________' |
---|
1134 | DO iz=1,dimz |
---|
1135 | PRINT *,iz,wrf_MOIST(ilmdz,iz,jlmdz,wrf_qvid), MixingRatioValues(lmdzp,iz,1),& |
---|
1136 | wrf_MOIST(ix,iz,jlmdz,wrf_qcid), MixingRatioValues(lmdzp,iz,2) |
---|
1137 | END DO |
---|
1138 | PRINT *,'k wrf_mass wrf_W wrf_dfulleta wrfMASSValues wrfZFluxMassValues ' // & |
---|
1139 | 'WFluxMassValues ____________' |
---|
1140 | DO iz=1,dimz |
---|
1141 | PRINT *,iz,wrf_permass(ilmdz,jlmdz)+wrf_basemass(ilmdz,jlmdz), & |
---|
1142 | wrf_W(ilmdz,iz,jlmdz), wrf_dfulleta(iz), wrfMASSValues(ilmdz,iz,jlmdz), & |
---|
1143 | wrfZFluxMassValues(ilmdz,iz,jlmdz), WFluxMassValues(lmdzp,iz) |
---|
1144 | END DO |
---|
1145 | END IF |
---|
1146 | |
---|
1147 | ip=icheck_p |
---|
1148 | jp=jcheck_p |
---|
1149 | |
---|
1150 | !! L. Fita, July 2013. |
---|
1151 | !! Misteriously 'physiq' suborutine from LMDZ can not be called using keys |
---|
1152 | !! |
---|
1153 | !! CALL physiq(NLON=dimxy, NLEV=dimz, & |
---|
1154 | !! & DEBUT=lmdz_debut, LAFIN=lmdz_lafin, & |
---|
1155 | !! & JD_CUR=wjulday, JH_CUR=wgmt, PDTPHYS=wtime_step, & |
---|
1156 | !! & PAPRS=FullPressValues, PPLAY=HalfPressValues, & |
---|
1157 | !! & PPHI=GeopotValues, PPHIS=wrf_sfcgeopot, & |
---|
1158 | !! & PRESNIVS=lmdzoutP, CLESPHY0=phykeys, & |
---|
1159 | !! & U=UValues, V=VValues, T=TValues, QX=MixingRatioValues, & |
---|
1160 | !! & FLXMASS_W=WFluxMassValues, & |
---|
1161 | !! & D_U=UtendValues, D_V=VtendValues, D_T=TtendValues, & |
---|
1162 | !! & D_QX=MixingRatiotendValues, D_PS=wrf_psfctend, & |
---|
1163 | !! & DUDYN=lmdz_dudyn, PVTETA=lmdz_PVtheta) |
---|
1164 | |
---|
1165 | !! PRINT *,' Lluis: going to physiq' |
---|
1166 | |
---|
1167 | CALL physiq(ddimxy, dimz, & |
---|
1168 | & lmdz_debut, lmdz_lafin, & |
---|
1169 | & wjulday, wgmt, wtime_step, & |
---|
1170 | & FullPressValues, HalfPressValues, & |
---|
1171 | & GeopotValues, sfcGeopotValues, & |
---|
1172 | & lmdzoutP, phykeys, & |
---|
1173 | & UValues, VValues, TValues, MixingRatioValues, & |
---|
1174 | & WFluxMassValues, & |
---|
1175 | & UtendValues, VtendValues, TtendValues, & |
---|
1176 | & MixingRatiotendValues, psfctendValues, & |
---|
1177 | & lmdz_dudyn, lmdz_PVtheta) |
---|
1178 | |
---|
1179 | ip=icheck_p |
---|
1180 | jp=jcheck_p |
---|
1181 | ! Lluis Testing water species |
---|
1182 | !! MixingRatiotendValues(:,:,1)=1000.*MixingRatiotendValues(:,:,1) |
---|
1183 | !! MixingRatiotendValues(:,:,1)=MixingRatiotendValues(:,:,1)+MixingRatiotendValues(:,:,2) |
---|
1184 | ! MixingRatiotendValues(:,:,2)=0. |
---|
1185 | |
---|
1186 | !! PRINT *,' Lluis: outgoing from physiq' |
---|
1187 | |
---|
1188 | !! Tvalues, [U/V/T]Values, are not given back just inputs |
---|
1189 | CALL vect_mat(TtendValues, dimx, dimy, dimz, wbdyw, wrf_Temptend) |
---|
1190 | CALL vect_mat(UtendValues, dimx, dimy, dimz, wbdyw, wrfUtenddestagg) |
---|
1191 | CALL vect_mat(VtendValues, dimx, dimy, dimz, wbdyw, wrfVtenddestagg) |
---|
1192 | ! CALL vect_mat(UtendValues, dimx, dimy, dimz, wbdyw, wrf_Utend) |
---|
1193 | ! CALL vect_mat(VtendValues, dimx, dimy, dimz, wbdyw, wrf_Vtend) |
---|
1194 | !! CALL vect_mat(TValues, dimx, dimy, dimz, wbdyw, wrf_Temp) |
---|
1195 | !! CALL vect_mat(UValues, dimx, dimy, dimz, wbdyw, wrf_U) |
---|
1196 | !! CALL vect_mat(VValues, dimx, dimy, dimz, wbdyw, wrf_V) |
---|
1197 | !! CALL vect_mat(HalfPressValues, dimx, dimy, dimz, wbdyw, wrf_P) |
---|
1198 | !! CALL vect_mat(FullPressValues, dimx, dimy, dimz, wbdyw, wrf_fullpres) |
---|
1199 | !! CALL vect_mat(GeopotValues, dimx, dimy, dimz, wbdyw, wrf_geopot) |
---|
1200 | |
---|
1201 | DO iy=1,ddimy |
---|
1202 | DO ix=1,ddimx |
---|
1203 | wrf_psfctend(ix,iy) = PsfctendValues(ddimx*(iy-1)+ix) |
---|
1204 | END DO |
---|
1205 | END DO |
---|
1206 | |
---|
1207 | !! No changes are suffered not need to give it back |
---|
1208 | !! CALL temp_to_theta(TEMPVALUES=wrf_Temp, PRESSVALUES=wrf_P, THETAVALUES=wrf_T & |
---|
1209 | !! ! Dimension arguments |
---|
1210 | !! & ,IDS=wids,IDE=wide, JDS=wjds,JDE=wjde, KDS=wkds,KDE=wkde & |
---|
1211 | !! & ,IMS=wims,IME=wime, JMS=wjms,JME=wjme, KMS=wkms,KME=wkme & |
---|
1212 | !! & ,IPS=wips,IPE=wipe, JPS=wjps,JPE=wjpe, KPS=wkps,KPE=wkpe & |
---|
1213 | !! & ,I_START=wi_start,I_END=wi_end & |
---|
1214 | !! & ,J_START=wj_start,J_END=wj_end & |
---|
1215 | !! & ,KTS=wkts, KTE=wkte & |
---|
1216 | !! & ,NUM_TILES=wnum_tiles & |
---|
1217 | !! & ) |
---|
1218 | |
---|
1219 | CALL temp_to_theta(TEMPVALUES=wrf_Temptend, PRESSVALUES=wrf_P, & |
---|
1220 | & THETAVALUES=wrf_Ttend & |
---|
1221 | ! Dimension arguments |
---|
1222 | & ,IDS=wids,IDE=wide, JDS=wjds,JDE=wjde, KDS=wkds,KDE=wkde & |
---|
1223 | & ,IMS=wims,IME=wime, JMS=wjms,JME=wjme, KMS=wkms,KME=wkme & |
---|
1224 | & ,IPS=wips,IPE=wipe, JPS=wjps,JPE=wjpe, KPS=wkps,KPE=wkpe & |
---|
1225 | & ,I_START=wi_start,I_END=wi_end & |
---|
1226 | & ,J_START=wj_start,J_END=wj_end & |
---|
1227 | & ,KTS=wkts, KTE=wkte & |
---|
1228 | & ,NUM_TILES=wnum_tiles & |
---|
1229 | & ) |
---|
1230 | |
---|
1231 | wrf_Ttend = wrf_Ttend + 300. |
---|
1232 | |
---|
1233 | ! Re-staggering wind tendencies |
---|
1234 | !! |
---|
1235 | |
---|
1236 | wrf_Utend(wims,:,wjms:wjme-1) = wrfUtenddestagg(wims,:,wjms:wjme-1) |
---|
1237 | wrf_Vtend(wims:wime-1,:,wjms) = wrfVtenddestagg(wims:wime-1,:,wjms) |
---|
1238 | wrf_Utend(wims,:,wjme-1) = wrfUtenddestagg(wims,:,wjme-1) |
---|
1239 | wrf_Vtend(wime-1,:,wjms) = wrfVtenddestagg(wime-1,:,wjms) |
---|
1240 | wrf_Utend(wims+1:wime-1,:,wjms:wjme-1) = & |
---|
1241 | & (wrfUtenddestagg(wims:wime-2,:,wjms:wjme-1) + & |
---|
1242 | & wrfUtenddestagg(wims+1:wime-1,:,wjms:wjme-1))/2. |
---|
1243 | wrf_Vtend(wims:wime-1,:,wjms+1:wjme-1) = & |
---|
1244 | & (wrfVtenddestagg(wims:wime-1,:,wjms:wjme-2) + & |
---|
1245 | & wrfVtenddestagg(wims:wime-1,:,wjms+1:wjme-1))/2. |
---|
1246 | wrf_Utend(wime,:,wjms:wjme-1) = wrfUtenddestagg(wime-1,:,wjms:wjme-1) |
---|
1247 | wrf_Vtend(wims:wime-1,:,wjme) = wrfVtenddestagg(wims:wime-1,:,wjme-1) |
---|
1248 | wrf_Utend(wime,:,wjme) = wrfUtenddestagg(wime-1,:,wjme-1) |
---|
1249 | wrf_Vtend(wime,:,wjme) = wrfVtenddestagg(wime-1,:,wjme-1) |
---|
1250 | |
---|
1251 | !! wrf_Ttend = wrf_Temptend |
---|
1252 | |
---|
1253 | !! wrf_perP = wrf_P - wrf_baseP |
---|
1254 | !! wrf_pergeopot = wrf_geopot - wrf_basegeopot |
---|
1255 | |
---|
1256 | !! CALL LMDZmoist_WRFmoist(MixingRatioValues, dimx, dimy, dimz, wnum3dm, wrf_qvid, & |
---|
1257 | !! & wrf_qcid, wrf_qrid, lmdzmixingratios, wrf_MOIST) |
---|
1258 | |
---|
1259 | CALL LMDZmoist_WRFmoist(MixingRatiotendValues, dimx, dimy, dimz, wnum3dm, wbdyw, & |
---|
1260 | & wrf_qvid, wrf_qcid, wrf_qrid, lmdzmixingratios, wrf_MOISTtend) |
---|
1261 | |
---|
1262 | IF (wrf_dbg >= 200) THEN |
---|
1263 | PRINT *,' WRF+LMDZ after LMDZ physiq lmdzp: ',lmdzp |
---|
1264 | PRINT *,'k T tendencies _______________' |
---|
1265 | DO iz=1,dimz |
---|
1266 | PRINT *,iz, TtendValues(lmdzp,iz), wrf_Temptend(ilmdz,iz,jlmdz), & |
---|
1267 | wrf_Ttend(ilmdz,iz,jlmdz) |
---|
1268 | END DO |
---|
1269 | PRINT *,'k U tendencies V tendencies_______________' |
---|
1270 | DO iz=1,dimz |
---|
1271 | PRINT *,iz, UtendValues(lmdzp,iz), wrf_Utend(ilmdz,iz,jlmdz), & |
---|
1272 | VtendValues(lmdzp,iz), wrf_Vtend(ilmdz,iz,jlmdz) |
---|
1273 | END DO |
---|
1274 | PRINT *,'k MixingRatiotendValues wrf_MOISTtend _______________' |
---|
1275 | DO iz=1,dimz |
---|
1276 | PRINT *,iz, MixingRatiotendValues(lmdzp,iz,1), & |
---|
1277 | wrf_MOISTtend(ilmdz,iz,jlmdz,wrf_qvid), MixingRatiotendValues(lmdzp,iz,2), & |
---|
1278 | wrf_MOISTtend(ilmdz,iz,jlmdz,wrf_qcid) |
---|
1279 | END DO |
---|
1280 | PRINT *,'wrf_sfcgeopot psfc_tendencies sfcGeopotValues_______________' |
---|
1281 | PRINT *,wrf_sfcgeopot(ilmdz,jlmdz), wrf_psfctend(ilmdz,jlmdz), & |
---|
1282 | sfcGeopotValues(lmdzp) |
---|
1283 | END IF |
---|
1284 | |
---|
1285 | ! PRINT *,' Lluis psfctendValues ______________ ' |
---|
1286 | ! DO ix=1,4*INT(ddimxy/4),4 |
---|
1287 | ! PRINT *,(ix+iy,':',psfctendValues(ix+iy), iy=0,3) |
---|
1288 | ! END DO |
---|
1289 | ! PRINT *,(iy,':',psfctendValues(iy), iy=4*INT(ddimxy/4)+1,ddimxy) |
---|
1290 | |
---|
1291 | ! All the tendencies have to be given as decoupled from the dry air mass column! (see dyn_em/module_em.F:rk_update_scalar) |
---|
1292 | !! |
---|
1293 | ! L. Fita, LMD January 2015. Adding map factor! |
---|
1294 | DO iz=1,dimz |
---|
1295 | wrf_Ttend(:,iz,:) = wrf_Ttend(:,iz,:)*wrf_mut/wrf_mapfac |
---|
1296 | wrf_Utend(:,iz,:) = wrf_Utend(:,iz,:)*wrf_muu/wrf_mapfac |
---|
1297 | wrf_Vtend(:,iz,:) = wrf_Vtend(:,iz,:)*wrf_muv/wrf_mapfac |
---|
1298 | DO iq=1,wnum3dm |
---|
1299 | wrf_MOISTtend(:,iz,:,iq) = wrf_MOISTtend(:,iz,:,iq)*wrf_mut/wrf_mapfac |
---|
1300 | END DO |
---|
1301 | END DO |
---|
1302 | |
---|
1303 | CALL get_lmdz(ddimx,ddimy,dimz,wbdyw,ddimxy,4,11,rlon,rlat,zmasq, & |
---|
1304 | pctsrf,ftsol,ftsoil,zxqsurf,qsurf,falb1,falb2,fevap,zxsnow,radsol,solsw, & |
---|
1305 | sollw,fder,rain_fall,snow_fall,agesno,zmea,zstd,zgam,zthe,zpic,zval,rugoro, & |
---|
1306 | frugs,zmax0,f0,wake_s,wake_cstar,wake_pe,wake_fip,sst,albedo, & |
---|
1307 | t_ancien,q_ancien,u_ancien,v_ancien,clwcon,rnebcon,ratqs,ema_work1,ema_work2, & |
---|
1308 | wake_deltat,wake_deltaq,fm_therm,entr_therm,detr_therm,phy_glo,wrf_grid) |
---|
1309 | ! CALL fonte_neige_final(runoff_lic) |
---|
1310 | |
---|
1311 | ! Some re-start variables |
---|
1312 | PRINT *,' Lluis lrunofflic: ',LBOUND(wrf_grid%lrunofflic), ':', & |
---|
1313 | UBOUND(wrf_grid%lrunofflic),' ruonff_lic: ',UBOUND(runoff_lic),' ddimx: ', & |
---|
1314 | ddimx,' ddimy: ',ddimy |
---|
1315 | |
---|
1316 | ! PRINT *,' iy ix ddimx*(iy-1)+ix runoff_lic wrf_grid%lrunofflic_______' |
---|
1317 | ! DO iy=1,ddimy |
---|
1318 | ! DO ix=1,ddimx |
---|
1319 | ! PRINT *,iy,ix,ddimx*(iy-1)+ix |
---|
1320 | ! wrf_grid%lrunofflic(ix,iy) = runoff_lic(ddimx*(iy-1)+ix) |
---|
1321 | ! PRINT *,iy,ix,ddimx*(iy-1)+ix,runoff_lic(ddimx*(iy-1)+ix),wrf_grid%lrunofflic(ix,iy) |
---|
1322 | ! END DO |
---|
1323 | ! END DO |
---|
1324 | |
---|
1325 | ! STOP |
---|
1326 | !! CALL get_lmdz(ddimx,ddimy,dimz,wbdyw,ddimxy,4,11,zmasq,pctsrf,ftsol, & |
---|
1327 | !! ftsoil,fqsurf,qsol_d,falb1,falb2,fevap,zxsnow,radsol,solsw,sollw,fder, & |
---|
1328 | !! rain_fall,snow_fall,agesno,zmea,zstd,zgam,zthe,zpic,zval,rugoro, & |
---|
1329 | !! frugs,run_off_lic,zmax0,f0,wake_s,wake_cstar,wake_pe,wake_fip,sst, & |
---|
1330 | !! albedo,t_ancien,q_ancien,u_ancien,v_ancien,clwcon,rnebcon,ratqs, & |
---|
1331 | !! ema_work1,ema_work2,wake_deltat,wake_deltaq,fm_therm,entr_therm, & |
---|
1332 | !! detr_therm,phy_glo,wrf_grid) |
---|
1333 | |
---|
1334 | PRINT *,' Lluis after get '//TRIM(Spt)//' ltksoil: ',wrf_grid%ltksoil(ip,:,jp), & |
---|
1335 | ' ftsol: ',ftsol(lp,:) |
---|
1336 | |
---|
1337 | PRINT *,' Lluis after get '//TRIM(Spt)//' fqsurf: ',zxqsurf(lp),' qsurf_rst: ', & |
---|
1338 | qsurf_rst(lp,:),' smois :',wrf_grid%smois(ip,:,jp),' lqksoil: ', & |
---|
1339 | wrf_grid%lqksoil(ip,:,jp) |
---|
1340 | |
---|
1341 | ! Recomputig again the total roughness length |
---|
1342 | LMDZvarmethod = 'prod' |
---|
1343 | |
---|
1344 | CALL wrf_varKsoil(wims,wime,wjms,wjme,dimx,dimy,wbdyw,LMDZvarmethod, & |
---|
1345 | wrf_grid%lter,wrf_grid%llic,wrf_grid%loce,wrf_grid%lsic, & |
---|
1346 | wrf_grid%lrugksoil(:,1,:),wrf_grid%lrugksoil(:,2,:),wrf_grid%lrugksoil(:,3,:), & |
---|
1347 | wrf_grid%lrugksoil(:,4,:),wrf_grid%lrug) |
---|
1348 | |
---|
1349 | CALL wrf_varKsoil(wims,wime,wjms,wjme,dimx,dimy,wbdyw,LMDZvarmethod, & |
---|
1350 | wrf_grid%lter,wrf_grid%llic,wrf_grid%loce,wrf_grid%lsic, & |
---|
1351 | wrf_grid%lalbksoil(:,1,:),wrf_grid%lalbksoil(:,2,:),wrf_grid%lalbksoil(:,3,:), & |
---|
1352 | wrf_grid%lalbksoil(:,4,:),wrf_grid%albedo) |
---|
1353 | |
---|
1354 | ! L. Fita, LMD January 2014. |
---|
1355 | ! It should work nicely in this way... but memory got crazy... |
---|
1356 | CALL get_lmdz_out(ddimx, ddimy, dimz, wbdyw, ddimxy, nbsrf, nsoilmx, & |
---|
1357 | & lmdzmixingratios, 1, 2, wrf_l_pbl, wrf_l_con, wrf_l_thermals, wrf_l_wake, & |
---|
1358 | & 0, wrf_grid%itimestep, wtime_step, FullPressValues, HalfPressValues, & |
---|
1359 | & GeopotValues, sfcGeopotValues, lmdzoutP, MixingRatioValues, & |
---|
1360 | & UtendValues, VtendValues, TtendValues, MixingRatiotendValues, & |
---|
1361 | & psfctendValues, wrf_grid) |
---|
1362 | |
---|
1363 | ip=icheck_p |
---|
1364 | jp=jcheck_p |
---|
1365 | |
---|
1366 | CALL put_lmdz_in_WRFout(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1367 | & wbdyw, ddimxy, ip, jp, lp, nbsrf, nsoilmx, & |
---|
1368 | & lmdzmixingratios, 1, 2, wrf_l_pbl, wrf_l_con, wrf_l_thermals, wrf_l_wake, & |
---|
1369 | & wrf_grid%itimestep, wtime_step, FullPressValues, HalfPressValues, & |
---|
1370 | & GeopotValues, sfcGeopotValues, lmdzoutP, MixingRatioValues, & |
---|
1371 | & UtendValues, VtendValues, TtendValues, MixingRatiotendValues, & |
---|
1372 | & psfctendValues, ORCHIDEElevels, ftsoil, WRF_nsoillayers, & |
---|
1373 | & wrf_grid%soil_layers/100., wrf_grid%zs, wrf_grid%dzs, wrf_grid%nest_pos, & |
---|
1374 | & wrf_grid%q2, wrf_grid%t2, wrf_grid%th2, wrf_grid%psfc, wrf_grid%u10, & |
---|
1375 | & wrf_grid%v10, wrf_grid%resm, wrf_grid%zetatop, wrf_grid%tslb,wrf_grid%smois,& |
---|
1376 | & wrf_grid%sh2o, wrf_grid%smcrel, wrf_grid%sfcrunoff, wrf_grid%udrunoff, & |
---|
1377 | & wrf_grid%grdflx, wrf_grid%acgrdflx, wrf_grid%snow, wrf_grid%snowh, & |
---|
1378 | & wrf_grid%canwat, wrf_grid%sst, wrf_grid%sstsk, wrf_grid%lai, & |
---|
1379 | & wrf_grid%h_diabatic, wrf_grid%sina, wrf_grid%tsk, wrf_grid%tiso, & |
---|
1380 | & wrf_grid%max_msftx, wrf_grid%max_msfty, wrf_grid%rainc, wrf_grid%raincv, & |
---|
1381 | & wrf_grid%rainsh, wrf_grid%rainshv, wrf_grid%rainnc, wrf_grid%rainncv, & |
---|
1382 | & wrf_grid%snownc, wrf_grid%snowncv, wrf_grid%graupelnc, wrf_grid%graupelncv, & |
---|
1383 | & wrf_grid%hailnc, wrf_grid%hailncv, wrf_grid%stepave_count, wrf_grid%cldfra, & |
---|
1384 | & wrf_grid%swdown, wrf_grid%glw, wrf_grid%swnorm, wrf_grid%olr, & |
---|
1385 | & wrf_grid%emiss, wrf_grid%tmn, wrf_grid%ust, wrf_grid%pblh, wrf_grid%hfx, & |
---|
1386 | & wrf_grid%qfx, wrf_grid%lh, wrf_grid%achfx, wrf_grid%aclhf, & |
---|
1387 | & wrf_grid%snowc, wrf_grid%sr, wrf_grid%potevp, wrf_grid%snopcx, & |
---|
1388 | & wrf_grid%soiltb) |
---|
1389 | ! & wrf_grid%save_topo_from_real, & |
---|
1390 | ! & wrf_grid%avg_fuel_frac, wrf_grid%uah, wrf_grid%vah, wrf_grid%seed1, & |
---|
1391 | ! & wrf_grid%seed2) |
---|
1392 | |
---|
1393 | ip=icheck_p |
---|
1394 | jp=jcheck_p |
---|
1395 | |
---|
1396 | |
---|
1397 | ! So it is done in a more larger to type and less elegant way... |
---|
1398 | ! |
---|
1399 | ! CALL get_lmdz_out2D_i(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1400 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, & |
---|
1401 | ! & wrf_l_wake, wrf_grid%itimestep, wtime_step, FullPressValues2, & |
---|
1402 | ! & HalfPressValues2, GeopotValues2, & |
---|
1403 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1404 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1405 | ! & MixingRatiotendValues2, psfctendValues2, wrf_grid%lages_ter, & |
---|
1406 | ! & wrf_grid%lages_lic, wrf_grid%lages_oce, wrf_grid%lages_sic, wrf_grid%laire, & |
---|
1407 | ! & wrf_grid%laireter, wrf_grid%lalb1, wrf_grid%lalb2, wrf_grid%lalbe_ter, & |
---|
1408 | ! & wrf_grid%lalbe_lic, wrf_grid%lalbe_oce, wrf_grid%lalbe_sic, wrf_grid%lale, & |
---|
1409 | ! & wrf_grid%lale_bl, wrf_grid%lale_wk, wrf_grid%lalp, wrf_grid%lalp_bl, & |
---|
1410 | ! & wrf_grid%lalp_wk, wrf_grid%lbils, wrf_grid%lbils_diss, wrf_grid%lbils_ec, & |
---|
1411 | ! & wrf_grid%lbils_enthalp, wrf_grid%lbils_kinetic, wrf_grid%lbils_latent, & |
---|
1412 | ! & wrf_grid%lbils_tke, wrf_grid%lcape, wrf_grid%lcape_max, wrf_grid%lcdrh, & |
---|
1413 | ! & wrf_grid%lcdrm, wrf_grid%lcldh, wrf_grid%lcldl, wrf_grid%lcldm, & |
---|
1414 | ! & wrf_grid%lcldq, wrf_grid%lcldt, wrf_grid%lcontfracatm, wrf_grid%lcontfracor,& |
---|
1415 | ! & wrf_grid%ldthmin, wrf_grid%ldtsvdft, wrf_grid%ldtsvdfo, wrf_grid%ldtsvdfg, & |
---|
1416 | ! & wrf_grid%ldtsvdfi) |
---|
1417 | |
---|
1418 | ! CALL get_lmdz_out2D_ii(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1419 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, & |
---|
1420 | ! & wrf_l_wake, wrf_grid%itimestep, wtime_step, FullPressValues2, & |
---|
1421 | ! & HalfPressValues2, GeopotValues2, & |
---|
1422 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1423 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1424 | ! & MixingRatiotendValues2, psfctendValues2, wrf_grid%levap, wrf_grid%levap_ter,& |
---|
1425 | ! & wrf_grid%levap_lic, & |
---|
1426 | ! & wrf_grid%levap_oce, wrf_grid%levap_sic, wrf_grid%levappot_ter, & |
---|
1427 | ! & wrf_grid%levappot_lic, wrf_grid%levappot_oce, wrf_grid%levappot_sic, & |
---|
1428 | ! & wrf_grid%lfbase, wrf_grid%lffonte, wrf_grid%lflat, wrf_grid%lflw_ter, & |
---|
1429 | ! & wrf_grid%lflw_lic, wrf_grid%lflw_oce, wrf_grid%lflw_sic, & |
---|
1430 | ! & wrf_grid%lfqcalving, wrf_grid%lfqfonte, wrf_grid%lfract_ter, & |
---|
1431 | ! & wrf_grid%lfract_lic, wrf_grid%lfract_oce, wrf_grid%lfract_sic, & |
---|
1432 | ! & wrf_grid%lfsnow, wrf_grid%lfsw_ter, wrf_grid%lfsw_lic, wrf_grid%lfsw_oce, & |
---|
1433 | ! & wrf_grid%lfsw_sic, wrf_grid%lftime_th, wrf_grid%liwp, wrf_grid%llat_ter, & |
---|
1434 | ! & wrf_grid%llat_lic, wrf_grid%llat_oce, wrf_grid%llat_sic, wrf_grid%llmaxth, & |
---|
1435 | ! & wrf_grid%llwp, wrf_grid%lmsnow) |
---|
1436 | |
---|
1437 | ! CALL get_lmdz_out2D_iii(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1438 | ! & wbdyw, ddimxy, ip, jp, lp, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, & |
---|
1439 | ! & wrf_l_thermals, wrf_l_wake, wrf_grid%itimestep, & |
---|
1440 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1441 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1442 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1443 | ! & MixingRatiotendValues2, psfctendValues2,wrf_grid%lndayrain,wrf_grid%lnettop,& |
---|
1444 | ! & wrf_grid%lpbase, wrf_grid%lphis, wrf_grid%lplcl, wrf_grid%lplfc, & |
---|
1445 | ! & wrf_grid%lpluc, wrf_grid%lplul, wrf_grid%lplulst, wrf_grid%lplulth, & |
---|
1446 | ! & wrf_grid%lpourc_ter, wrf_grid%lpourc_lic, wrf_grid%lpourc_oce, & |
---|
1447 | ! & wrf_grid%lpourc_sic, wrf_grid%lprecip, wrf_grid%lprw, wrf_grid%lpsol, & |
---|
1448 | ! & wrf_grid%lptop, wrf_grid%lqsat2m, wrf_grid%lqsol, wrf_grid%lqsurf, & |
---|
1449 | ! & wrf_grid%lradsol, wrf_grid%lrh2m, wrf_grid%lrh2m_max, wrf_grid%lrh2m_min, & |
---|
1450 | ! & wrf_grid%lrugs, wrf_grid%lrugs_ter, wrf_grid%lrugs_lic, wrf_grid%lrugs_oce, & |
---|
1451 | ! & wrf_grid%lrugs_sic, wrf_grid%lsens, wrf_grid%lsicf, wrf_grid%ls_lcl, & |
---|
1452 | ! & wrf_grid%lslp, wrf_grid%lsnow, wrf_grid%lsnowl, wrf_grid%lsoll, & |
---|
1453 | ! & wrf_grid%lsoll0, wrf_grid%lsollwdown, wrf_grid%lsols, wrf_grid%lsols0, & |
---|
1454 | ! & wrf_grid%ls_pblh, wrf_grid%ls_pblt, wrf_grid%ls_therm) |
---|
1455 | |
---|
1456 | ! CALL get_lmdz_out2D_iv(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1457 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, & |
---|
1458 | ! & wrf_l_wake, wrf_grid%itimestep, & |
---|
1459 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1460 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1461 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1462 | ! & MixingRatiotendValues2, psfctendValues2, wrf_grid%lt2m, & |
---|
1463 | ! & wrf_grid%lt2m_max, wrf_grid%lt2m_min, wrf_grid%lt2m_ter, wrf_grid%lt2m_lic, & |
---|
1464 | ! & wrf_grid%lt2m_oce, wrf_grid%lt2m_sic, wrf_grid%ltaux, wrf_grid%ltauy, & |
---|
1465 | ! & wrf_grid%ltaux_ter, wrf_grid%ltaux_lic, wrf_grid%ltaux_oce, & |
---|
1466 | ! & wrf_grid%ltaux_sic, wrf_grid%ltauy_ter, wrf_grid%ltauy_lic, & |
---|
1467 | ! & wrf_grid%ltauy_oce, wrf_grid%ltauy_sic, wrf_grid%lt_oce_sic, wrf_grid%ltopl,& |
---|
1468 | ! & wrf_grid%ltopl0, wrf_grid%ltops, wrf_grid%ltops0, wrf_grid%ltpot, & |
---|
1469 | ! & wrf_grid%ltpote, wrf_grid%ltsol, wrf_grid%ltsol_ter, wrf_grid%ltsol_lic, & |
---|
1470 | ! & wrf_grid%ltsol_oce, wrf_grid%ltsol_sic) |
---|
1471 | |
---|
1472 | ! CALL get_lmdz_out2D_v(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1473 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, & |
---|
1474 | ! & wrf_l_wake, wrf_grid%itimestep, & |
---|
1475 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1476 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1477 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1478 | ! & MixingRatiotendValues2, psfctendValues2,wrf_grid%lu10m, wrf_grid%lu10m_ter, & |
---|
1479 | ! & wrf_grid%lu10m_lic, wrf_grid%lu10m_oce, wrf_grid%lu10m_sic, wrf_grid%lue, & |
---|
1480 | ! & wrf_grid%luq, wrf_grid%lustar, wrf_grid%lustar_ter, wrf_grid%lustar_lic, & |
---|
1481 | ! & wrf_grid%lustar_oce, wrf_grid%lustar_sic, wrf_grid%lv10m, & |
---|
1482 | ! & wrf_grid%lv10m_ter, wrf_grid%lv10m_lic, wrf_grid%lv10m_oce, & |
---|
1483 | ! & wrf_grid%lv10m_sic, wrf_grid%lve, wrf_grid%lvq, wrf_grid%lwake_h, & |
---|
1484 | ! & wrf_grid%lwake_s, wrf_grid%lwbeff, wrf_grid%lwbilo_ter, wrf_grid%lwbilo_lic,& |
---|
1485 | ! & wrf_grid%lwbilo_oce, wrf_grid%lwbilo_sic, wrf_grid%lwbils_ter, & |
---|
1486 | ! & wrf_grid%lwbils_lic, wrf_grid%lwbils_oce, wrf_grid%lwbils_sic, & |
---|
1487 | ! & wrf_grid%lweakinv, wrf_grid%lwind10m, wrf_grid%lwind10max, wrf_grid%lzmax_th) |
---|
1488 | |
---|
1489 | ! DO iz=wkms, wkme-2 |
---|
1490 | ! CALL get_lmdz_out3D_z_i(wims, wime, wjms, wjme, iz, ddimx, ddimy, dimz, wbdyw, & |
---|
1491 | ! & ddimxy, ip, jp, lp, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_con, & |
---|
1492 | ! & wrf_l_thermals, wrf_l_wake, & |
---|
1493 | ! & wrf_grid%itimestep, & |
---|
1494 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1495 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1496 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1497 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1498 | ! & wrf_grid%la_th(wims:wime,iz,wjms:wjme), & |
---|
1499 | ! & wrf_grid%lbeta_prec(wims:wime,iz,wjms:wjme), & |
---|
1500 | ! & wrf_grid%ldmc(wims:wime,iz,wjms:wjme), & |
---|
1501 | ! & wrf_grid%ldnwd(wims:wime,iz,wjms:wjme), & |
---|
1502 | ! & wrf_grid%ldnwd0(wims:wime,iz,wjms:wjme), & |
---|
1503 | ! & wrf_grid%ldqajs(wims:wime,iz,wjms:wjme), & |
---|
1504 | ! & wrf_grid%ldqcon(wims:wime,iz,wjms:wjme), & |
---|
1505 | ! & wrf_grid%ldqdyn(wims:wime,iz,wjms:wjme), & |
---|
1506 | ! & wrf_grid%ldqeva(wims:wime,iz,wjms:wjme), & |
---|
1507 | ! & wrf_grid%ldqlsc(wims:wime,iz,wjms:wjme), & |
---|
1508 | ! & wrf_grid%ldqlscst(wims:wime,iz,wjms:wjme), & |
---|
1509 | ! & wrf_grid%ldqlscth(wims:wime,iz,wjms:wjme), & |
---|
1510 | ! & wrf_grid%ldqphy(wims:wime,iz,wjms:wjme), & |
---|
1511 | ! & wrf_grid%ldqthe(wims:wime,iz,wjms:wjme), & |
---|
1512 | ! & wrf_grid%ldqvdf(wims:wime,iz,wjms:wjme), & |
---|
1513 | ! & wrf_grid%ldqwak(wims:wime,iz,wjms:wjme)) |
---|
1514 | |
---|
1515 | ! CALL get_lmdz_out3D_z_ii(wims, wime, wjms, wjme, iz, ddimx, ddimy, dimz, & |
---|
1516 | ! & wbdyw, ddimxy, ip, jp, lp, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, & |
---|
1517 | ! & wrf_l_thermals, wrf_l_wake, & |
---|
1518 | ! & wrf_grid%itimestep, & |
---|
1519 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1520 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1521 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1522 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1523 | ! & wrf_grid%ldtajs(wims:wime,iz,wjms:wjme), & |
---|
1524 | ! & wrf_grid%ldtcon(wims:wime,iz,wjms:wjme), & |
---|
1525 | ! & wrf_grid%ldtdis(wims:wime,iz,wjms:wjme), & |
---|
1526 | ! & wrf_grid%ldtdyn(wims:wime,iz,wjms:wjme), & |
---|
1527 | ! & wrf_grid%ldtec(wims:wime,iz,wjms:wjme), & |
---|
1528 | ! & wrf_grid%ldteva(wims:wime,iz,wjms:wjme), & |
---|
1529 | ! & wrf_grid%ld_th(wims:wime,iz,wjms:wjme), & |
---|
1530 | ! & wrf_grid%lcldemi(wims:wime,iz,wjms:wjme), & |
---|
1531 | ! & wrf_grid%lcldtau(wims:wime,iz,wjms:wjme), & |
---|
1532 | ! & wrf_grid%lclwcon(wims:wime,iz,wjms:wjme), & |
---|
1533 | ! & wrf_grid%ldtlif(wims:wime,iz,wjms:wjme), & |
---|
1534 | ! & wrf_grid%ldtlsc(wims:wime,iz,wjms:wjme), & |
---|
1535 | ! & wrf_grid%ldtlschr(wims:wime,iz,wjms:wjme), & |
---|
1536 | ! & wrf_grid%ldtlscst(wims:wime,iz,wjms:wjme), & |
---|
1537 | ! & wrf_grid%ldtlscth(wims:wime,iz,wjms:wjme), & |
---|
1538 | ! & wrf_grid%ldtlw0(wims:wime,iz,wjms:wjme), & |
---|
1539 | ! & wrf_grid%ldtlwr(wims:wime,iz,wjms:wjme), & |
---|
1540 | ! & wrf_grid%ldtoro(wims:wime,iz,wjms:wjme), & |
---|
1541 | ! & wrf_grid%ldtphy(wims:wime,iz,wjms:wjme), & |
---|
1542 | ! & wrf_grid%ldtsw0(wims:wime,iz,wjms:wjme), & |
---|
1543 | ! & wrf_grid%ldtswr(wims:wime,iz,wjms:wjme), & |
---|
1544 | ! & wrf_grid%ldtthe(wims:wime,iz,wjms:wjme), & |
---|
1545 | ! & wrf_grid%ldtvdf(wims:wime,iz,wjms:wjme), & |
---|
1546 | ! & wrf_grid%ldtwak(wims:wime,iz,wjms:wjme)) |
---|
1547 | |
---|
1548 | ! CALL get_lmdz_out3D_z_iii(wims, wime, wjms, wjme, iz, ddimx, ddimy, & |
---|
1549 | ! & dimz, wbdyw, ddimxy, ip, jp, lp, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, & |
---|
1550 | ! & wrf_l_con, wrf_l_thermals, wrf_l_wake, wrf_grid%itimestep, & |
---|
1551 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1552 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1553 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1554 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1555 | ! & wrf_grid%lducon(wims:wime,iz,wjms:wjme), & |
---|
1556 | ! & wrf_grid%ldudyn(wims:wime,iz,wjms:wjme), & |
---|
1557 | ! & wrf_grid%ldulif(wims:wime,iz,wjms:wjme), & |
---|
1558 | ! & wrf_grid%lduoro(wims:wime,iz,wjms:wjme), & |
---|
1559 | ! & wrf_grid%lduvdf(wims:wime,iz,wjms:wjme), & |
---|
1560 | ! & wrf_grid%ldvcon(wims:wime,iz,wjms:wjme), & |
---|
1561 | ! & wrf_grid%ldvdyn(wims:wime,iz,wjms:wjme), & |
---|
1562 | ! & wrf_grid%ldvlif(wims:wime,iz,wjms:wjme), & |
---|
1563 | ! & wrf_grid%ldvoro(wims:wime,iz,wjms:wjme), & |
---|
1564 | ! & wrf_grid%ldvvdf(wims:wime,iz,wjms:wjme), & |
---|
1565 | ! & wrf_grid%le_th(wims:wime,iz,wjms:wjme), & |
---|
1566 | ! & wrf_grid%levu(wims:wime,iz,wjms:wjme), & |
---|
1567 | ! & wrf_grid%lfl(wims:wime,iz,wjms:wjme), & |
---|
1568 | ! & wrf_grid%lgeop(wims:wime,iz,wjms:wjme), & |
---|
1569 | ! & wrf_grid%lh2o(wims:wime,iz,wjms:wjme), & |
---|
1570 | ! & wrf_grid%liwcon(wims:wime,iz,wjms:wjme), & |
---|
1571 | ! & wrf_grid%lkz(wims:wime,iz,wjms:wjme), & |
---|
1572 | ! & wrf_grid%lkz_max(wims:wime,iz,wjms:wjme), & |
---|
1573 | ! & wrf_grid%llambda_th(wims:wime,iz,wjms:wjme), & |
---|
1574 | ! & wrf_grid%llwcon(wims:wime,iz,wjms:wjme), & |
---|
1575 | ! & wrf_grid%lma(wims:wime,iz,wjms:wjme), & |
---|
1576 | ! & wrf_grid%lmc(wims:wime,iz,wjms:wjme), & |
---|
1577 | ! & wrf_grid%lmcd(wims:wime,iz,wjms:wjme), & |
---|
1578 | ! & wrf_grid%lmass(wims:wime,iz,wjms:wjme)) |
---|
1579 | |
---|
1580 | ! CALL get_lmdz_out3D_z_iv(wims, wime, wjms, wjme, iz, ddimx, ddimy, dimz, & |
---|
1581 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, & |
---|
1582 | ! & wrf_l_wake, wrf_grid%itimestep, & |
---|
1583 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1584 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1585 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1586 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1587 | ! & wrf_grid%loliq(wims:wime,iz,wjms:wjme), & |
---|
1588 | ! & wrf_grid%lovap(wims:wime,iz,wjms:wjme), & |
---|
1589 | ! & wrf_grid%lovapinit(wims:wime,iz,wjms:wjme), & |
---|
1590 | ! & wrf_grid%lpaprs(wims:wime,iz,wjms:wjme), & |
---|
1591 | ! & wrf_grid%lpr_con_i(wims:wime,iz,wjms:wjme), & |
---|
1592 | ! & wrf_grid%lpr_con_l(wims:wime,iz,wjms:wjme), & |
---|
1593 | ! & wrf_grid%lpres(wims:wime,iz,wjms:wjme), & |
---|
1594 | ! & wrf_grid%lpr_lsc_i(wims:wime,iz,wjms:wjme), & |
---|
1595 | ! & wrf_grid%lpr_lsc_l(wims:wime,iz,wjms:wjme), & |
---|
1596 | ! & wrf_grid%lptconv(wims:wime,iz,wjms:wjme), & |
---|
1597 | ! & wrf_grid%lq_th(wims:wime,iz,wjms:wjme), & |
---|
1598 | ! & wrf_grid%lratqs(wims:wime,iz,wjms:wjme), & |
---|
1599 | ! & wrf_grid%lre(wims:wime,iz,wjms:wjme), & |
---|
1600 | ! & wrf_grid%lref_ice(wims:wime,iz,wjms:wjme), & |
---|
1601 | ! & wrf_grid%lref_liq(wims:wime,iz,wjms:wjme), & |
---|
1602 | ! & wrf_grid%lrhum(wims:wime,iz,wjms:wjme), & |
---|
1603 | ! & wrf_grid%lrld(wims:wime,iz,wjms:wjme), & |
---|
1604 | ! & wrf_grid%lrldcs(wims:wime,iz,wjms:wjme), & |
---|
1605 | ! & wrf_grid%lrlu(wims:wime,iz,wjms:wjme), & |
---|
1606 | ! & wrf_grid%lrlucs(wims:wime,iz,wjms:wjme), & |
---|
1607 | ! & wrf_grid%lrneb(wims:wime,iz,wjms:wjme), & |
---|
1608 | ! & wrf_grid%lrnebcon(wims:wime,iz,wjms:wjme), & |
---|
1609 | ! & wrf_grid%lrnebls(wims:wime,iz,wjms:wjme), & |
---|
1610 | ! & wrf_grid%lrsd(wims:wime,iz,wjms:wjme), & |
---|
1611 | ! & wrf_grid%lrsdcs(wims:wime,iz,wjms:wjme), & |
---|
1612 | ! & wrf_grid%lrsu(wims:wime,iz,wjms:wjme), & |
---|
1613 | ! & wrf_grid%lrsucs(wims:wime,iz,wjms:wjme)) |
---|
1614 | |
---|
1615 | ! CALL get_lmdz_out3D_z_v(wims, wime, wjms, wjme, iz, ddimx, ddimy, dimz, & |
---|
1616 | ! & wbdyw, ddimxy, ip, jp, lp, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, 1, & |
---|
1617 | ! & wrf_l_con, wrf_l_thermals, wrf_l_wake, wrf_grid%itimestep, & |
---|
1618 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1619 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1620 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1621 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1622 | ! & wrf_grid%lsens_ter(wims:wime,iz,wjms:wjme), & |
---|
1623 | ! & wrf_grid%lsens_lic(wims:wime,iz,wjms:wjme), & |
---|
1624 | ! & wrf_grid%lsens_oce(wims:wime,iz,wjms:wjme), & |
---|
1625 | ! & wrf_grid%lsens_sic(wims:wime,iz,wjms:wjme), & |
---|
1626 | ! & wrf_grid%ltemp(wims:wime,iz,wjms:wjme), & |
---|
1627 | ! & wrf_grid%ltheta(wims:wime,iz,wjms:wjme), & |
---|
1628 | ! & wrf_grid%ltke(wims:wime,iz,wjms:wjme), & |
---|
1629 | ! & wrf_grid%ltke_max(wims:wime,iz,wjms:wjme), & |
---|
1630 | ! & wrf_grid%ltke_ter(wims:wime,iz,wjms:wjme), & |
---|
1631 | ! & wrf_grid%ltke_lic(wims:wime,iz,wjms:wjme), & |
---|
1632 | ! & wrf_grid%ltke_oce(wims:wime,iz,wjms:wjme), & |
---|
1633 | ! & wrf_grid%ltke_sic(wims:wime,iz,wjms:wjme), & |
---|
1634 | ! & wrf_grid%ltnhus(wims:wime,iz,wjms:wjme), & |
---|
1635 | ! & wrf_grid%ltnhusc(wims:wime,iz,wjms:wjme), & |
---|
1636 | ! & wrf_grid%ltnhusscpbl(wims:wime,iz,wjms:wjme), & |
---|
1637 | ! & wrf_grid%ltnt(wims:wime,iz,wjms:wjme), & |
---|
1638 | ! & wrf_grid%ltntc(wims:wime,iz,wjms:wjme), & |
---|
1639 | ! & wrf_grid%ltntr(wims:wime,iz,wjms:wjme), & |
---|
1640 | ! & wrf_grid%ltntscpbl(wims:wime,iz,wjms:wjme), & |
---|
1641 | ! & wrf_grid%lupwd(wims:wime,iz,wjms:wjme), & |
---|
1642 | ! & wrf_grid%lvitu(wims:wime,iz,wjms:wjme), & |
---|
1643 | ! & wrf_grid%lvitv(wims:wime,iz,wjms:wjme), & |
---|
1644 | ! & wrf_grid%lvitw(wims:wime,iz,wjms:wjme), & |
---|
1645 | ! & wrf_grid%lvprecip(wims:wime,iz,wjms:wjme), & |
---|
1646 | ! & wrf_grid%lwake_omg(wims:wime,iz,wjms:wjme), & |
---|
1647 | ! & wrf_grid%lwdtraina(wims:wime,iz,wjms:wjme), & |
---|
1648 | ! & wrf_grid%lwdtrainm(wims:wime,iz,wjms:wjme), & |
---|
1649 | ! & wrf_grid%lzfull(wims:wime,iz,wjms:wjme), & |
---|
1650 | ! & wrf_grid%lzhalf(wims:wime,iz,wjms:wjme)) |
---|
1651 | |
---|
1652 | ! END DO |
---|
1653 | |
---|
1654 | ! CALL get_lmdz_out3D_ii(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1655 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, & |
---|
1656 | ! & wrf_l_wake, wrf_grid%itimestep, & |
---|
1657 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1658 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1659 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1660 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1661 | ! & wrf_grid%ldtajs, & |
---|
1662 | ! & wrf_grid%ldtcon, wrf_grid%ldtdis, wrf_grid%ldtdyn, wrf_grid%ldtec, & |
---|
1663 | ! & wrf_grid%ldteva, wrf_grid%ld_th, wrf_grid%lcldemi, wrf_grid%lcldtau, & |
---|
1664 | ! & wrf_grid%lclwcon, wrf_grid%ldtlif, wrf_grid%ldtlsc, wrf_grid%ldtlschr, & |
---|
1665 | ! & wrf_grid%ldtlscst, wrf_grid%ldtlscth, wrf_grid%ldtlw0, wrf_grid%ldtlwr, & |
---|
1666 | ! & wrf_grid%ldtoro, wrf_grid%ldtphy, wrf_grid%ldtsw0, wrf_grid%ldtswr, & |
---|
1667 | ! & wrf_grid%ldtthe, wrf_grid%ldtvdf, wrf_grid%ldtwak) |
---|
1668 | |
---|
1669 | ! CALL get_lmdz_out3D_iii(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1670 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, wrf_l_wake, wrf_grid%itimestep, & |
---|
1671 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1672 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1673 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1674 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1675 | ! & wrf_grid%lducon, & |
---|
1676 | ! & wrf_grid%ldudyn, wrf_grid%ldulif, wrf_grid%lduoro, wrf_grid%lduvdf, & |
---|
1677 | ! & wrf_grid%ldvcon, wrf_grid%ldvdyn, wrf_grid%ldvlif, wrf_grid%ldvoro, & |
---|
1678 | ! & wrf_grid%ldvvdf, wrf_grid%le_th, wrf_grid%levu, wrf_grid%lfl,wrf_grid%lgeop,& |
---|
1679 | ! & wrf_grid%lh2o, wrf_grid%liwcon, wrf_grid%lkz, wrf_grid%lkz_max, & |
---|
1680 | ! & wrf_grid%llambda_th, wrf_grid%llwcon, wrf_grid%lma, wrf_grid%lmass) |
---|
1681 | |
---|
1682 | ! CALL get_lmdz_out3D_iv(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1683 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, wrf_l_wake, wrf_grid%itimestep, & |
---|
1684 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1685 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1686 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1687 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1688 | ! & wrf_grid%loliq, wrf_grid%lovap, & |
---|
1689 | ! & wrf_grid%lovapinit, wrf_grid%lpaprs, wrf_grid%lpr_con_i, wrf_grid%lpr_con_l,& |
---|
1690 | ! & wrf_grid%lpres, wrf_grid%lpr_lsc_i, wrf_grid%lpr_lsc_l, wrf_grid%lptconv, & |
---|
1691 | ! & wrf_grid%lq_th, wrf_grid%lratqs, wrf_grid%lre, wrf_grid%lref_ice, & |
---|
1692 | ! & wrf_grid%lref_liq, wrf_grid%lrhum, wrf_grid%lrld, wrf_grid%lrldcs, & |
---|
1693 | ! & wrf_grid%lrlu, wrf_grid%lrlucs, wrf_grid%lrneb, wrf_grid%lrnebcon, & |
---|
1694 | ! & wrf_grid%lrnebls, wrf_grid%lrsd, wrf_grid%lrsdcs, wrf_grid%lrsu, & |
---|
1695 | ! & wrf_grid%lrsucs) |
---|
1696 | |
---|
1697 | ! CALL get_lmdz_out3D_v(wims, wime, wjms, wjme, wkms, wkme, ddimx, ddimy, dimz, & |
---|
1698 | ! & wbdyw, ddimxy, nbsrf, nsoilmx, lmdzmixingratios, 1, 2, wrf_l_thermals, wrf_l_wake, wrf_grid%itimestep, & |
---|
1699 | ! & wtime_step, FullPressValues2, HalfPressValues2, GeopotValues2, & |
---|
1700 | ! & sfcGeopotValues, lmdzoutP, MixingRatioValues2, & |
---|
1701 | ! & UtendValues2, VtendValues2, TtendValues2, & |
---|
1702 | ! & MixingRatiotendValues2, psfctendValues2, & |
---|
1703 | ! & wrf_grid%lsens_ter, wrf_grid%lsens_lic, wrf_grid%lsens_oce, & |
---|
1704 | ! & wrf_grid%lsens_sic, wrf_grid%ltemp, wrf_grid%ltheta, wrf_grid%ltke, & |
---|
1705 | ! & wrf_grid%ltke_max, wrf_grid%ltke_ter, wrf_grid%ltke_lic, wrf_grid%ltke_oce, & |
---|
1706 | ! & wrf_grid%ltke_sic, wrf_grid%ltnhus, wrf_grid%ltnhusc, wrf_grid%ltnhusscpbl, & |
---|
1707 | ! & wrf_grid%ltnt, wrf_grid%ltntc, wrf_grid%ltntr, wrf_grid%ltntscpbl, & |
---|
1708 | ! & wrf_grid%lupwd, wrf_grid%lvitu, wrf_grid%lvitv, wrf_grid%lvitw, & |
---|
1709 | ! & wrf_grid%lwake_deltaq, wrf_grid%lwake_deltat, wrf_grid%lwake_omg, & |
---|
1710 | ! & wrf_grid%lwdtraina, wrf_grid%lwdtrainm, wrf_grid%lzfull, wrf_grid%lzhalf) |
---|
1711 | |
---|
1712 | DEALLOCATE(MixingRatioValues) |
---|
1713 | DEALLOCATE(MixingRatiotendValues) |
---|
1714 | |
---|
1715 | WRITE(message, *)' exiting: module_lmdz_phys.F' |
---|
1716 | CALL wrf_debug(75, message) |
---|
1717 | |
---|
1718 | END SUBROUTINE call_lmdz_phys |
---|
1719 | |
---|
1720 | END MODULE module_lmdz_phys |
---|