source: lmdz_wrf/trunk/WRFV3/phys/module_lmdz_phys.F @ 192

Last change on this file since 192 was 184, checked in by lfita, 11 years ago

Adding 'qc' on mp==0 in Registry/Registry?.EM.LMDZ. With this now we have also

'QCLOUD' even with mp=0. This is the way to keep liquid water for the next
time-step and have large scale precipitation!

Adding some checks around moisture values and tendencies...

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