source: LMDZ6/branches/contrails/libf/phylmd/phys_state_var_mod.F90 @ 5797

Last change on this file since 5797 was 5797, checked in by aborella, 4 months ago

Bugfix for saturation adjustment in cirrus mixing + bugfix for contrails sedimentation + new diagnostics + support for unadjusted contrails

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 42.7 KB
Line 
1!
2! $Id: phys_state_var_mod.F90 5797 2025-08-05 12:22:14Z aborella $
3!
4      MODULE phys_state_var_mod
5! Variables sauvegardees pour le startphy.nc
6!======================================================================
7!
8!
9!======================================================================
10! Declaration des variables
11      USE dimphy
12      USE dimsoil_mod_h, ONLY: nsoilmx
13      USE netcdf, only: nf90_fill_real
14      INTEGER, PARAMETER :: nlevSTD=17
15      INTEGER, PARAMETER :: nlevSTD8=8
16      INTEGER, PARAMETER :: nlevSTD3=3
17      INTEGER, PARAMETER :: nout=10
18      INTEGER, PARAMETER :: napisccp=1
19      INTEGER, SAVE :: radpas  ! radiation is called every "radpas" step
20      INTEGER, SAVE :: cvpas   ! convection is called every "cvpas" step
21      INTEGER, SAVE :: cvpas_0 = 1 ! reference value for cvpas
22      INTEGER, SAVE :: wkpas   ! wake scheme is called every "wkpas" step
23      REAL, PARAMETER :: missing_val_nf90=nf90_fill_real
24!$OMP THREADPRIVATE(radpas)
25!$OMP THREADPRIVATE(cvpas)
26!$OMP THREADPRIVATE(cvpas_0)
27!$OMP THREADPRIVATE(wkpas)
28      REAL, SAVE :: phys_tstep=0, solaire_etat0
29!$OMP THREADPRIVATE(phys_tstep, solaire_etat0)
30
31      REAL, ALLOCATABLE, SAVE :: pctsrf(:,:)
32!$OMP THREADPRIVATE(pctsrf)
33      REAL, ALLOCATABLE, SAVE :: ftsol(:,:)
34!$OMP THREADPRIVATE(ftsol)
35      REAL, ALLOCATABLE, SAVE :: beta_aridity(:,:)
36!$OMP THREADPRIVATE(beta_aridity)
37      REAL,ALLOCATABLE,SAVE :: qsol(:),fevap(:,:),z0m(:,:),z0h(:,:),agesno(:,:)
38!$OMP THREADPRIVATE(qsol,fevap,z0m,z0h,agesno)
39!FC drag des arbres
40      REAL, ALLOCATABLE, SAVE :: treedrg(:,:,:)
41!$OMP THREADPRIVATE(treedrg)
42!AM land surface heterogeneities
43      REAL, SAVE :: alpha_soil_tersrf
44!$OMP THREADPRIVATE(alpha_soil_tersrf)
45      REAL, SAVE :: period_tersrf
46!$OMP THREADPRIVATE(period_tersrf)
47      REAL, ALLOCATABLE, SAVE :: frac_tersrf(:,:)
48!$OMP THREADPRIVATE(frac_tersrf)
49      REAL, ALLOCATABLE, SAVE :: z0m_tersrf(:,:)
50!$OMP THREADPRIVATE(z0m_tersrf)
51      REAL, ALLOCATABLE, SAVE :: ratio_z0m_z0h_tersrf(:,:)
52!$OMP THREADPRIVATE(ratio_z0m_z0h_tersrf)
53      REAL, ALLOCATABLE, SAVE :: albedo_tersrf(:,:)
54!$OMP THREADPRIVATE(albedo_tersrf)
55      REAL, ALLOCATABLE, SAVE :: beta_tersrf(:,:)
56!$OMP THREADPRIVATE(beta_tersrf)
57      REAL, ALLOCATABLE, SAVE :: inertie_tersrf(:,:)
58!$OMP THREADPRIVATE(inertie_tersrf)
59      REAL, ALLOCATABLE, SAVE :: hcond_tersrf(:,:)
60!$OMP THREADPRIVATE(hcond_tersrf)
61      REAL, ALLOCATABLE, SAVE :: tsurfi_tersrf(:,:)
62!$OMP THREADPRIVATE(tsurfi_tersrf)
63      REAL, ALLOCATABLE, SAVE :: tsoili_tersrf(:,:,:)
64!$OMP THREADPRIVATE(tsoili_tersrf)
65      REAL, ALLOCATABLE, SAVE :: tsoil_depth(:,:,:)
66!$OMP THREADPRIVATE(tsoil_depth)
67      REAL, ALLOCATABLE, SAVE :: tsurf_tersrf(:,:)
68!$OMP THREADPRIVATE(tsurf_tersrf)
69     REAL, ALLOCATABLE, SAVE :: tsoil_tersrf(:,:,:)
70!$OMP THREADPRIVATE(tsoil_tersrf)
71      REAL, ALLOCATABLE, SAVE :: qsurf_tersrf(:,:)
72!$OMP THREADPRIVATE(qsurf_tersrf)
73      REAL, ALLOCATABLE, SAVE :: tsurf_new_tersrf(:,:)
74!$OMP THREADPRIVATE(tsurf_new_tersrf)
75      REAL, ALLOCATABLE, SAVE :: cdragm_tersrf(:,:)
76!$OMP THREADPRIVATE(cdragm_tersrf)
77      REAL, ALLOCATABLE, SAVE :: cdragh_tersrf(:,:)
78!$OMP THREADPRIVATE(cdragh_tersrf)
79      REAL, ALLOCATABLE, SAVE :: swnet_tersrf(:,:)
80!$OMP THREADPRIVATE(swnet_tersrf)
81      REAL, ALLOCATABLE, SAVE :: lwnet_tersrf(:,:)
82!$OMP THREADPRIVATE(lwnet_tersrf)
83      REAL, ALLOCATABLE, SAVE :: fluxsens_tersrf(:,:)
84!$OMP THREADPRIVATE(fluxsens_tersrf)
85      REAL, ALLOCATABLE, SAVE :: fluxlat_tersrf(:,:)
86!$OMP THREADPRIVATE(fluxlat_tersrf)
87
88!      character(len=6), SAVE :: ocean
89!!!!!!$OMP THREADPRIVATE(ocean)
90!      logical, SAVE :: ok_veget
91!!!!!!$OMP THREADPRIVATE(ok_veget)
92      REAL, ALLOCATABLE, SAVE :: falb1(:,:), falb2(:,:)
93!$OMP THREADPRIVATE(falb1, falb2)
94
95!albedo SB >>>
96      REAL, ALLOCATABLE, SAVE :: falb_dif(:,:,:), falb_dir(:,:,:)
97      REAL, ALLOCATABLE, SAVE :: chl_con(:)
98!$OMP THREADPRIVATE(falb_dir,falb_dif,chl_con)
99!albedo SB <<<
100
101
102      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:), bs_fall(:)
103!$OMP THREADPRIVATE( rain_fall, snow_fall, bs_fall)
104      REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:)
105!$OMP THREADPRIVATE(solsw, solswfdiff, sollw)
106      REAL, ALLOCATABLE, SAVE :: radsol(:)
107!$OMP THREADPRIVATE(radsol)
108      REAL, ALLOCATABLE, SAVE :: swradcorr(:)
109!$OMP THREADPRIVATE(swradcorr)
110#ifdef ISO
111      REAL,ALLOCATABLE,SAVE :: xtsol(:,:),fxtevap(:,:,:)
112!$OMP THREADPRIVATE(xtsol,fxtevap)
113      REAL, ALLOCATABLE, SAVE :: xtrain_fall(:,:), xtsnow_fall(:,:)
114!$OMP THREADPRIVATE(xtrain_fall,xtsnow_fall)
115#endif
116
117!clesphy0 param physiq
118!
119! Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
120!
121      REAL, ALLOCATABLE, SAVE :: zmea(:), zstd(:), zsig(:), zgam(:)
122!$OMP THREADPRIVATE(zmea, zstd, zsig, zgam)
123      REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:)
124!$OMP THREADPRIVATE(zthe, zpic, zval)
125!     REAL tabcntr0(100)
126      REAL, ALLOCATABLE, SAVE :: rugoro(:)
127!$OMP THREADPRIVATE(rugoro)
128      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
129!$OMP THREADPRIVATE(t_ancien, q_ancien)
130      REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:), qbs_ancien(:,:)
131!$OMP THREADPRIVATE(ql_ancien, qs_ancien, qbs_ancien)
132      REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:), prbsw_ancien(:)
133!$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
134#ifdef ISO
135      REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:), xtbs_ancien(:,:,:)
136!$OMP THREADPRIVATE(xt_ancien,xtl_ancien,xts_ancien,xtbs_ancien)
137#endif
138      REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
139!$OMP THREADPRIVATE(u_ancien, v_ancien)
140      REAL, ALLOCATABLE, SAVE :: cf_ancien(:,:), qvc_ancien(:,:)
141!$OMP THREADPRIVATE(cf_ancien, qvc_ancien)
142      REAL, ALLOCATABLE, SAVE :: qvcon(:,:), qccon(:,:)
143!$OMP THREADPRIVATE(qvcon, qccon)
144      REAL, ALLOCATABLE, SAVE :: cfc_ancien(:,:), qtc_ancien(:,:)
145!$OMP THREADPRIVATE(cfc_ancien, qtc_ancien)
146      REAL, ALLOCATABLE, SAVE :: qic_ancien(:,:), nic_ancien(:,:)
147!$OMP THREADPRIVATE(qic_ancien, nic_ancien)
148       REAL, ALLOCATABLE, SAVE :: tke_ancien(:,:)
149!$OMP THREADPRIVATE(tke_ancien)
150!!! RomP >>>
151      REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:)
152!$OMP THREADPRIVATE(tr_ancien)
153!!! RomP <<<
154      LOGICAL, SAVE :: ancien_ok
155!$OMP THREADPRIVATE(ancien_ok)
156      REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:)
157!$OMP THREADPRIVATE(clwcon,rnebcon)
158      REAL, ALLOCATABLE, SAVE :: qtc_cv(:,:),sigt_cv(:,:),detrain_cv(:,:),fm_cv(:,:)
159!$OMP THREADPRIVATE(qtc_cv,sigt_cv,detrain_cv,fm_cv)
160      REAL, ALLOCATABLE, SAVE :: ratqs(:,:)
161!$OMP THREADPRIVATE(ratqs)
162      REAL, ALLOCATABLE, SAVE :: pbl_tke(:,:,:) ! turb kinetic energy
163      REAL, ALLOCATABLE, SAVE :: coefh(:,:,:) ! Kz enthalpie
164      REAL, ALLOCATABLE, SAVE :: coefm(:,:,:) ! Kz momentum
165!$OMP THREADPRIVATE(pbl_tke, coefh,coefm)
166      REAL, ALLOCATABLE, SAVE :: zmax0(:), f0(:) !
167!$OMP THREADPRIVATE(zmax0,f0)
168      REAL, ALLOCATABLE, SAVE :: sig1(:,:), w01(:,:)
169!$OMP THREADPRIVATE(sig1,w01)
170      REAL, ALLOCATABLE, SAVE :: entr_therm(:,:), fm_therm(:,:)
171!$OMP THREADPRIVATE(entr_therm,fm_therm)
172      REAL, ALLOCATABLE, SAVE :: detr_therm(:,:)
173!$OMP THREADPRIVATE(detr_therm)
174!IM 150408
175!     pour phsystoke avec thermiques
176      REAL,ALLOCATABLE,SAVE :: clwcon0th(:,:),rnebcon0th(:,:)
177!$OMP THREADPRIVATE(clwcon0th,rnebcon0th)
178! radiation outputs
179!FC
180      REAL,ALLOCATABLE,SAVE :: lwtoab(:,:), lwtoa0b(:,:)
181!$OMP THREADPRIVATE(lwtoab,lwtoa0b)
182      REAL,ALLOCATABLE,SAVE :: lwtoabp(:,:), lwtoa0bp(:,:)
183!$OMP THREADPRIVATE(lwtoabp,lwtoa0bp)
184! FC
185      REAL,ALLOCATABLE,SAVE :: swdnc0(:,:), swdn0(:,:), swdn(:,:)
186!$OMP THREADPRIVATE(swdnc0,swdn0,swdn)
187      REAL,ALLOCATABLE,SAVE :: swupc0(:,:), swup0(:,:), swup(:,:)
188!$OMP THREADPRIVATE(swupc0, swup0,swup)
189      REAL,ALLOCATABLE,SAVE :: SWdn200clr(:), SWdn200(:)
190!$OMP THREADPRIVATE(SWdn200clr,SWdn200)
191      REAL,ALLOCATABLE,SAVE :: SWup200clr(:), SWup200(:)
192!$OMP THREADPRIVATE(SWup200clr,SWup200)
193      REAL,ALLOCATABLE,SAVE :: lwdnc0(:,:), lwdn0(:,:), lwdn(:,:)
194!$OMP THREADPRIVATE(lwdnc0,lwdn0,lwdn)
195      REAL,ALLOCATABLE,SAVE :: lwupc0(:,:), lwup0(:,:), lwup(:,:)
196!$OMP THREADPRIVATE(lwupc0,lwup0,lwup)
197      REAL,ALLOCATABLE,SAVE :: LWdn200clr(:), LWdn200(:)
198!$OMP THREADPRIVATE(LWdn200clr,LWdn200)
199      REAL,ALLOCATABLE,SAVE :: LWup200clr(:), LWup200(:)
200!$OMP THREADPRIVATE(LWup200clr,LWup200)
201      REAL,ALLOCATABLE,SAVE :: LWdnTOA(:), LWdnTOAclr(:)
202!$OMP THREADPRIVATE(LWdnTOA,LWdnTOAclr)
203! pressure level
204      REAL,ALLOCATABLE,SAVE :: tsumSTD(:,:,:)
205!$OMP THREADPRIVATE(tsumSTD)
206      REAL,ALLOCATABLE,SAVE :: usumSTD(:,:,:), vsumSTD(:,:,:)
207!$OMP THREADPRIVATE(usumSTD,vsumSTD)
208      REAL,ALLOCATABLE,SAVE :: wsumSTD(:,:,:), phisumSTD(:,:,:)
209!$OMP THREADPRIVATE(wsumSTD,phisumSTD)
210      REAL,ALLOCATABLE,SAVE :: qsumSTD(:,:,:), rhsumSTD(:,:,:)
211!$OMP THREADPRIVATE(qsumSTD,rhsumSTD)
212      REAL,ALLOCATABLE,SAVE :: tnondef(:,:,:)
213!$OMP THREADPRIVATE(tnondef)
214      REAL,ALLOCATABLE,SAVE :: uvsumSTD(:,:,:)
215!$OMP THREADPRIVATE(uvsumSTD)
216      REAL,ALLOCATABLE,SAVE :: vqsumSTD(:,:,:)
217!$OMP THREADPRIVATE(vqsumSTD)
218      REAL,ALLOCATABLE,SAVE :: vTsumSTD(:,:,:)
219!$OMP THREADPRIVATE(vTsumSTD)
220      REAL,ALLOCATABLE,SAVE :: wqsumSTD(:,:,:)
221!$OMP THREADPRIVATE(wqsumSTD)
222      REAL,ALLOCATABLE,SAVE :: vphisumSTD(:,:,:)
223!$OMP THREADPRIVATE(vphisumSTD)
224      REAL,ALLOCATABLE,SAVE :: wTsumSTD(:,:,:)
225!$OMP THREADPRIVATE(wTsumSTD)
226      REAL,ALLOCATABLE,SAVE :: u2sumSTD(:,:,:)
227!$OMP THREADPRIVATE(u2sumSTD)
228      REAL,ALLOCATABLE,SAVE :: v2sumSTD(:,:,:)
229!$OMP THREADPRIVATE(v2sumSTD)
230      REAL,ALLOCATABLE,SAVE :: T2sumSTD(:,:,:)
231!$OMP THREADPRIVATE(T2sumSTD)
232      REAL,ALLOCATABLE,SAVE :: O3sumSTD(:,:,:), O3daysumSTD(:,:,:)
233!$OMP THREADPRIVATE(O3sumSTD,O3daysumSTD)
234!GG
235      REAL,ALLOCATABLE,SAVE :: hice(:)
236!$OMP THREADPRIVATE(hice)
237      REAL,ALLOCATABLE,SAVE :: tice(:)
238!$OMP THREADPRIVATE(tice)
239      REAL,ALLOCATABLE,SAVE :: bilg_cumul(:)
240!$OMP THREADPRIVATE(bilg_cumul)
241!GG
242!IM begin
243      REAL,ALLOCATABLE,SAVE :: wlevSTD(:,:), ulevSTD(:,:), vlevSTD(:,:)
244!$OMP THREADPRIVATE(wlevSTD,ulevSTD,vlevSTD)
245      REAL,ALLOCATABLE,SAVE :: tlevSTD(:,:), qlevSTD(:,:), rhlevSTD(:,:)
246!$OMP THREADPRIVATE(tlevSTD,qlevSTD,rhlevSTD)
247      REAL,ALLOCATABLE,SAVE :: philevSTD(:,:)
248!$OMP THREADPRIVATE(philevSTD)
249      REAL,ALLOCATABLE,SAVE :: uvSTD(:,:)
250!$OMP THREADPRIVATE(uvSTD)
251      REAL,ALLOCATABLE,SAVE :: vqSTD(:,:)
252!$OMP THREADPRIVATE(vqSTD)
253      REAL,ALLOCATABLE,SAVE :: vTSTD(:,:)
254!$OMP THREADPRIVATE(vTSTD)
255      REAL,ALLOCATABLE,SAVE :: wqSTD(:,:)
256!$OMP THREADPRIVATE(wqSTD)
257      REAL,ALLOCATABLE,SAVE :: vphiSTD(:,:)
258!$OMP THREADPRIVATE(vphiSTD)
259      REAL,ALLOCATABLE,SAVE :: wTSTD(:,:)
260!$OMP THREADPRIVATE(wTSTD)
261      REAL,ALLOCATABLE,SAVE :: u2STD(:,:)
262!$OMP THREADPRIVATE(u2STD)
263      REAL,ALLOCATABLE,SAVE :: v2STD(:,:)
264!$OMP THREADPRIVATE(v2STD)
265      REAL,ALLOCATABLE,SAVE :: T2STD(:,:)
266!$OMP THREADPRIVATE(T2STD)
267      REAL,ALLOCATABLE,SAVE :: O3STD(:,:), O3daySTD(:,:)
268!$OMP THREADPRIVATE(O3STD,O3daySTD)
269!IM end
270      INTEGER,ALLOCATABLE,SAVE :: seed_old(:,:)
271!$OMP THREADPRIVATE(seed_old)
272      REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:)
273!$OMP THREADPRIVATE(zuthe,zvthe)
274      REAL,ALLOCATABLE,SAVE :: alb_neig(:)
275!$OMP THREADPRIVATE(alb_neig)
276!cloud base mass flux
277      REAL,ALLOCATABLE,SAVE :: ema_cbmf(:)
278!$OMP THREADPRIVATE(ema_cbmf)
279!cloud base pressure & cloud top pressure
280      REAL,ALLOCATABLE,SAVE :: ema_pcb(:), ema_pct(:)
281!$OMP THREADPRIVATE(ema_pcb,ema_pct)
282      REAL,ALLOCATABLE,SAVE :: Mipsh(:,:)     ! mass flux shed from  adiab. ascents
283!$OMP THREADPRIVATE(Mipsh)
284      REAL,ALLOCATABLE,SAVE :: Ma(:,:)       ! undilute upward mass flux
285!$OMP THREADPRIVATE(Ma)
286      REAL,ALLOCATABLE,SAVE :: qcondc(:,:)    ! in-cld water content from convect
287!$OMP THREADPRIVATE(qcondc)
288      REAL,ALLOCATABLE,SAVE :: wd(:) ! sb
289!$OMP THREADPRIVATE(wd)
290      REAL,ALLOCATABLE,SAVE :: sigd(:)
291!$OMP THREADPRIVATE(sigd)
292!
293      REAL,ALLOCATABLE,SAVE :: cin(:)
294!$OMP THREADPRIVATE(cin)
295! ftd : convective heating due to unsaturated downdraughts
296      REAL,ALLOCATABLE,SAVE :: ftd(:,:)
297!$OMP THREADPRIVATE(ftd)
298! fqd : convective moistening due to unsaturated downdraughts
299      REAL,ALLOCATABLE,SAVE :: fqd(:,:),fqcomp(:,:)     
300!$OMP THREADPRIVATE(fqd,fqcomp)
301#ifdef ISO
302      REAL, ALLOCATABLE, SAVE :: fxtd(:,:,:)
303!$OMP THREADPRIVATE(fxtd)
304#endif
305!34EK
306! -- Variables de controle de ALE et ALP
307!ALE : Energie disponible pour soulevement : utilisee par la
308!      convection d'Emanuel pour le declenchement et la regulation
309      REAL,ALLOCATABLE,SAVE :: ALE(:)
310!$OMP THREADPRIVATE(ALE)
311!ALP : Puissance  disponible pour soulevement
312      REAL,ALLOCATABLE,SAVE :: ALP(:)
313!$OMP THREADPRIVATE(ALP)
314!
315! nouvelles variables pour le couplage convection-couche limite
316      REAL,ALLOCATABLE,SAVE :: Ale_bl(:)
317!$OMP THREADPRIVATE(Ale_bl)
318      REAL,ALLOCATABLE,SAVE :: Alp_bl(:)
319!$OMP THREADPRIVATE(Alp_bl)
320      INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:)
321!$OMP THREADPRIVATE(lalim_conv)
322      REAL,ALLOCATABLE,SAVE :: wght_th(:,:)
323!$OMP THREADPRIVATE(wght_th)
324      REAL,ALLOCATABLE,SAVE    :: ale_wake(:)
325!$OMP THREADPRIVATE(ale_wake)
326      REAL,ALLOCATABLE,SAVE    :: ale_bl_stat(:)
327!$OMP THREADPRIVATE(ale_bl_stat)
328!
329! variables de la wake
330! wake_deltat : ecart de temperature avec la zone non perturbee
331! wake_deltaq : ecart d'humidite avec la zone non perturbee
332! wake_s      : fraction surfacique occupee par la poche froide
333! awake_s     : surface fraction covered by active wakes
334! wake_dens   : number of wakes per unit area
335! awake_dens  : number of active wakes per unit area
336! cv_gen      : birth rate of cumulonimbus per unit area.
337! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
338! wake_Cstar  : vitesse d'etalement de la poche
339! wake_pe     : wake potential energy - WAPE
340! wake_fip    : Gust Front Impinging power - ALP
341      REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:)
342!$OMP THREADPRIVATE(wake_deltat)
343      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
344!$OMP THREADPRIVATE(wake_deltaq)
345#ifdef ISO
346      REAL, ALLOCATABLE, SAVE :: wake_deltaxt(:,:,:)
347!$OMP THREADPRIVATE(wake_deltaxt)
348#endif
349      REAL,ALLOCATABLE,SAVE :: wake_s(:), awake_s(:)
350!$OMP THREADPRIVATE(wake_s, awake_s)
351      REAL,ALLOCATABLE,SAVE :: wake_dens(:), awake_dens(:)
352!$OMP THREADPRIVATE(wake_dens, awake_dens)
353      REAL,ALLOCATABLE,SAVE :: cv_gen(:)
354!$OMP THREADPRIVATE(cv_gen)
355      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
356!$OMP THREADPRIVATE(wake_Cstar)
357      REAL,ALLOCATABLE,SAVE :: wake_pe(:)
358!$OMP THREADPRIVATE(wake_pe)
359      REAL,ALLOCATABLE,SAVE :: wake_fip(:)
360!$OMP THREADPRIVATE(wake_fip)
361!
362!jyg<
363! variables related to the spitting of the PBL between wake and
364! off-wake regions.
365! wake_delta_pbl_TKE : difference TKE_w - TKE_x
366      REAL,ALLOCATABLE,SAVE :: wake_delta_pbl_TKE(:,:,:)
367!$OMP THREADPRIVATE(wake_delta_pbl_TKE)
368!nrlmd<
369      REAL, ALLOCATABLE, SAVE :: delta_tsurf(:,:) ! Surface temperature difference inside-outside cold pool
370!$OMP THREADPRIVATE(delta_tsurf)
371!>nrlmd
372!>jyg
373!
374! pfrac_impa : Produits des coefs lessivage impaction
375! pfrac_nucl : Produits des coefs lessivage nucleation
376! pfrac_1nucl: Produits des coefs lessi nucl (alpha = 1)
377      REAL,ALLOCATABLE,SAVE :: pfrac_impa(:,:), pfrac_nucl(:,:)
378!$OMP THREADPRIVATE(pfrac_impa,pfrac_nucl)
379      REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:)
380!$OMP THREADPRIVATE(pfrac_1nucl)
381!
382      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
383!$OMP THREADPRIVATE(total_rain,nday_rain)
384      REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:)
385!$OMP THREADPRIVATE(ndayrain_mth)
386      REAL,ALLOCATABLE,SAVE :: paire_ter(:)
387!$OMP THREADPRIVATE(paire_ter)
388! albsol1: albedo du sol total pour SW visible
389! albsol2: albedo du sol total pour SW proche IR
390      REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:)
391!$OMP THREADPRIVATE(albsol1,albsol2)
392
393!albedo SB >>>
394      REAL,ALLOCATABLE,SAVE :: albsol_dif(:,:),albsol_dir(:,:)
395!$OMP THREADPRIVATE(albsol_dif,albsol_dir)
396!albedo SB <<<
397
398
399      REAL, ALLOCATABLE, SAVE:: wo(:, :, :)
400      ! column-density of ozone in a layer, in kilo-Dobsons
401      ! Third dimension has size 1 or 2.
402      ! "wo(:, :, 1)" is for the average day-night field,
403      ! "wo(:, :, 2)" is for daylight time.
404      !$OMP THREADPRIVATE(wo)
405
406! heat : chauffage solaire
407! heat0: chauffage solaire ciel clair
408! cool : refroidissement infrarouge
409! cool0 : refroidissement infrarouge ciel clair
410! sollwdown : downward LW flux at surface
411! sollwdownclr : downward CS LW flux at surface
412! toplwdown : downward CS LW flux at TOA
413! toplwdownclr : downward CS LW flux at TOA
414! heat_volc : chauffage solaire du au volcanisme
415! cool_volc : refroidissement infrarouge du au volcanisme
416      REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:)
417!$OMP THREADPRIVATE(clwcon0,rnebcon0)
418      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
419!$OMP THREADPRIVATE(heat)
420      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
421!$OMP THREADPRIVATE(heat0)
422      REAL,ALLOCATABLE,SAVE :: cool(:,:)
423!$OMP THREADPRIVATE(cool)
424      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
425!$OMP THREADPRIVATE(cool0)
426      REAL,ALLOCATABLE,SAVE :: heat_volc(:,:)   
427!$OMP THREADPRIVATE(heat_volc)
428      REAL,ALLOCATABLE,SAVE :: cool_volc(:,:)
429!$OMP THREADPRIVATE(cool_volc)
430      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
431!$OMP THREADPRIVATE(topsw,toplw)
432      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
433!$OMP THREADPRIVATE(sollwdown)
434      REAL,ALLOCATABLE,SAVE :: gustiness(:)
435!$OMP THREADPRIVATE(gustiness)
436      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
437!$OMP THREADPRIVATE(sollwdownclr)
438      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
439!$OMP THREADPRIVATE(toplwdown)
440      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
441!$OMP THREADPRIVATE(toplwdownclr)
442      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
443!$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0)
444      REAL,ALLOCATABLE,SAVE :: albpla(:)
445!$OMP THREADPRIVATE(albpla)
446
447!IM ajout variables CFMIP2/CMIP5
448      REAL,ALLOCATABLE,SAVE :: heatp(:,:), coolp(:,:)
449!$OMP THREADPRIVATE(heatp, coolp)
450      REAL,ALLOCATABLE,SAVE :: heat0p(:,:), cool0p(:,:)
451!$OMP THREADPRIVATE(heat0p, cool0p)
452      REAL,ALLOCATABLE,SAVE :: radsolp(:), topswp(:), toplwp(:)
453!$OMP THREADPRIVATE(radsolp, topswp, toplwp)
454      REAL,ALLOCATABLE,SAVE :: albplap(:)
455!$OMP THREADPRIVATE(albplap)
456      REAL,ALLOCATABLE,SAVE :: solswp(:), solswfdiffp(:), sollwp(:)
457!$OMP THREADPRIVATE(solswp, solswfdiffp, sollwp)
458      REAL,ALLOCATABLE,SAVE :: sollwdownp(:)
459!$OMP THREADPRIVATE(sollwdownp)
460      REAL,ALLOCATABLE,SAVE :: topsw0p(:),toplw0p(:)
461      REAL,ALLOCATABLE,SAVE :: solsw0p(:),sollw0p(:)
462!$OMP THREADPRIVATE(topsw0p,toplw0p,solsw0p,sollw0p)
463      REAL,ALLOCATABLE,SAVE :: lwdnc0p(:,:), lwdn0p(:,:), lwdnp(:,:)
464      REAL,ALLOCATABLE,SAVE :: lwupc0p(:,:), lwup0p(:,:), lwupp(:,:)
465!$OMP THREADPRIVATE(lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp)
466      REAL,ALLOCATABLE,SAVE :: swdnc0p(:,:), swdn0p(:,:), swdnp(:,:)
467      REAL,ALLOCATABLE,SAVE :: swupc0p(:,:), swup0p(:,:), swupp(:,:)
468!$OMP THREADPRIVATE(swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp)
469
470!AI ajout variables double appel Ecrad (3Deffect)
471      REAL,ALLOCATABLE,SAVE :: heat_s2(:,:), cool_s2(:,:)
472!$OMP THREADPRIVATE(heat_s2, cool_s2)
473      REAL,ALLOCATABLE,SAVE :: heat0_s2(:,:), cool0_s2(:,:)
474!$OMP THREADPRIVATE(heat0_s2, cool0_s2)
475      REAL,ALLOCATABLE,SAVE :: radsol_s2(:), topsw_s2(:), toplw_s2(:)
476!$OMP THREADPRIVATE(radsol_s2, topsw_s2, toplw_s2)
477      REAL,ALLOCATABLE,SAVE :: albpla_s2(:)
478!$OMP THREADPRIVATE(albpla_s2)
479      REAL,ALLOCATABLE,SAVE :: solsw_s2(:), solswfdiff_s2(:), sollw_s2(:)
480!$OMP THREADPRIVATE(solsw_s2, solswfdiff_s2, sollw_s2)
481      REAL,ALLOCATABLE,SAVE :: sollwdown_s2(:), sollwdownclr_s2(:)
482!$OMP THREADPRIVATE(sollwdown_s2, sollwdownclr_s2)
483      REAL,ALLOCATABLE,SAVE :: topsw0_s2(:),toplw0_s2(:)
484      REAL,ALLOCATABLE,SAVE :: solsw0_s2(:),sollw0_s2(:)
485!$OMP THREADPRIVATE(topsw0_s2,toplw0_s2,solsw0_s2,sollw0_s2)
486      REAL,ALLOCATABLE,SAVE :: lwdnc0_s2(:,:), lwdn0_s2(:,:), lwdn_s2(:,:)
487      REAL,ALLOCATABLE,SAVE :: lwupc0_s2(:,:), lwup0_s2(:,:), lwup_s2(:,:)
488!$OMP THREADPRIVATE(lwdnc0_s2,lwdn0_s2,lwdn_s2,lwupc0_s2,lwup0_s2,lwup_s2)       
489      REAL,ALLOCATABLE,SAVE :: swdnc0_s2(:,:), swdn0_s2(:,:), swdn_s2(:,:)
490      REAL,ALLOCATABLE,SAVE :: swupc0_s2(:,:), swup0_s2(:,:), swup_s2(:,:)
491!$OMP THREADPRIVATE(swdnc0_s2, swdn0_s2, swdn_s2 , swupc0_s2, swup0_s2, swup_s2)
492!FC
493      REAL,ALLOCATABLE,SAVE :: lwtoab_s2(:,:), lwtoa0b_s2(:,:)
494!$OMP THREADPRIVATE(lwtoab_s2,lwtoa0b_s2)
495
496
497! pbase : cloud base pressure
498! bbase : cloud base buoyancy
499      REAL,ALLOCATABLE,SAVE :: cape(:)
500!$OMP THREADPRIVATE(cape)
501      REAL,ALLOCATABLE,SAVE :: pbase(:)
502!$OMP THREADPRIVATE(pbase)
503      REAL,ALLOCATABLE,SAVE :: bbase(:)
504!$OMP THREADPRIVATE(bbase)
505!
506      REAL,SAVE,ALLOCATABLE :: zqasc(:,:)
507!$OMP THREADPRIVATE( zqasc)
508      INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:)
509!$OMP THREADPRIVATE(ibas_con,itop_con)
510      REAL,SAVE,ALLOCATABLE :: rain_con(:)
511!$OMP THREADPRIVATE(rain_con)
512      REAL,SAVE,ALLOCATABLE :: snow_con(:)
513!$OMP THREADPRIVATE(snow_con)
514!
515#ifdef ISO
516      REAL,SAVE,ALLOCATABLE :: xtrain_con(:,:)
517!$OMP THREADPRIVATE(xtrain_con)
518      REAL,SAVE,ALLOCATABLE :: xtsnow_con(:,:)
519!$OMP THREADPRIVATE(xtsnow_con)
520#endif
521      REAL,SAVE,ALLOCATABLE :: rlonPOS(:)
522!$OMP THREADPRIVATE(rlonPOS)
523      REAL,SAVE,ALLOCATABLE :: newsst(:)
524!$OMP THREADPRIVATE(newsst)
525      REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:),wstar(:,:)
526!$OMP THREADPRIVATE(ustar,u10m,v10m,wstar)
527!
528! ok_ade=T -ADE=topswad-topsw
529! ok_aie=T ->
530!       ok_ade=T -AIE=topswai-topswad
531!       ok_ade=F -AIE=topswai-topsw
532!
533!topswad, solswad : Aerosol direct effect
534      REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:)
535!$OMP THREADPRIVATE(topswad,solswad)
536!topswai, solswai : Aerosol indirect effect
537      REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:)
538!$OMP THREADPRIVATE(topswai,solswai)
539
540      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
541!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
542      REAL,SAVE,ALLOCATABLE :: tau_aero_sw_rrtm(:,:,:,:), piz_aero_sw_rrtm(:,:,:,:), cg_aero_sw_rrtm(:,:,:,:)
543!$OMP THREADPRIVATE(tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm)
544      REAL,SAVE,ALLOCATABLE :: tau_aero_lw_rrtm(:,:,:,:), piz_aero_lw_rrtm(:,:,:,:), cg_aero_lw_rrtm(:,:,:,:)
545!$OMP THREADPRIVATE(tau_aero_lw_rrtm, piz_aero_lw_rrtm, cg_aero_lw_rrtm)
546      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
547!$OMP THREADPRIVATE(ccm)
548
549      REAL,SAVE,ALLOCATABLE :: ale_bl_trig(:)
550!$OMP THREADPRIVATE(ale_bl_trig)
551
552      REAL,SAVE,ALLOCATABLE :: ratqs_inter_(:,:),sigma_qtherm(:,:)
553!$OMP THREADPRIVATE(ratqs_inter_,sigma_qtherm)
554
555#ifdef ISO
556#ifdef ISOTRAC
557      INTEGER,SAVE,ALLOCATABLE :: bassin_map(:)
558!$OMP THREADPRIVATE(bassin_map)
559      INTEGER,SAVE,ALLOCATABLE :: boite_map(:,:)
560!$OMP THREADPRIVATE(boite_map)
561#endif   
562#endif
563      REAL, ALLOCATABLE, SAVE:: du_gwd_rando(:, :), du_gwd_front(:, :)
564      !$OMP THREADPRIVATE(du_gwd_rando, du_gwd_front)
565      ! tendencies on wind due to gravity waves
566
567      LOGICAL,SAVE :: is_initialized=.FALSE.
568!$OMP THREADPRIVATE(is_initialized)   
569
570      ! Ocean-atmosphere interface:
571
572      REAL, ALLOCATABLE, SAVE:: ds_ns(:) ! (klon)
573      ! "delta salinity near surface". Salinity variation in the
574      ! near-surface turbulent layer. That is subskin salinity minus
575      ! foundation salinity. In ppt.
576
577      REAL, ALLOCATABLE, SAVE:: dt_ns(:) ! (klon)
578      ! "delta temperature near surface". Temperature variation in the
579      ! near-surface turbulent layer. That is subskin temperature
580      ! minus foundation temperature. (Can be negative.) In K.
581     
582      REAL, ALLOCATABLE, SAVE:: delta_sst(:) ! (klon)
583      ! Ocean-air interface temperature minus bulk SST, in
584      ! K. Allocated and defined only if activate_ocean_skin >= 1.
585
586      REAL, ALLOCATABLE, SAVE:: delta_sal(:) ! (klon)
587      ! Ocean-air interface salinity minus bulk salinity, in ppt
588     
589      REAL, ALLOCATABLE, SAVE:: dter(:) ! (klon)
590      ! Temperature variation in the diffusive microlayer, that is
591      ! ocean-air interface temperature minus subskin temperature. In K.
592
593      REAL, SAVE, ALLOCATABLE:: dser(:) ! (klon)
594      ! Salinity variation in the diffusive microlayer, that is
595      ! ocean-air interface salinity minus subskin salinity. In ppt.
596
597      real, SAVE, ALLOCATABLE:: dt_ds(:) ! (klon)
598      ! (tks / tkt) * dTer, in K
599
600      !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser, dt_ds)
601
602
603    CONTAINS
604
605!======================================================================
606SUBROUTINE phys_state_var_init(read_climoz)
607USE dimphy
608USE aero_mod
609USE infotrac_phy, ONLY : nbtr
610#ifdef ISO
611USE infotrac_phy, ONLY : ntraciso=>ntiso,niso
612#endif
613USE clesphys_mod_h
614USE indice_sol_mod
615use config_ocean_skin_m, only: activate_ocean_skin
616use surface_data, only: type_ocean
617IMPLICIT NONE
618
619integer, intent(in)::  read_climoz
620! read ozone climatology
621! Allowed values are 0, 1 and 2
622! 0: do not read an ozone climatology
623! 1: read a single ozone climatology that will be used day and night
624! 2: read two ozone climatologies, the average day and night
625! climatology and the daylight climatology
626
627
628      print*, 'is_initialized', is_initialized
629      IF (is_initialized) RETURN
630      is_initialized=.TRUE.
631      ALLOCATE(pctsrf(klon,nbsrf))
632      ALLOCATE(ftsol(klon,nbsrf))
633      ALLOCATE(beta_aridity(klon,nbsrf))
634      ALLOCATE(qsol(klon),fevap(klon,nbsrf))
635      ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf))
636!FC
637      ALLOCATE(treedrg(klon,klev,nbsrf))
638!AM
639      ALLOCATE(frac_tersrf(klon,nbtersrf))
640      ALLOCATE(z0m_tersrf(klon,nbtersrf))
641      ALLOCATE(ratio_z0m_z0h_tersrf(klon,nbtersrf))
642      ALLOCATE(albedo_tersrf(klon,nbtersrf))
643      ALLOCATE(beta_tersrf(klon,nbtersrf))
644      ALLOCATE(inertie_tersrf(klon,nbtersrf))
645      ALLOCATE(hcond_tersrf(klon,nbtersrf))
646      ALLOCATE(tsurfi_tersrf(klon,nbtersrf))
647      ALLOCATE(tsoili_tersrf(klon,nbtsoildepths,nbtersrf))
648      ALLOCATE(tsoil_depth(klon,nbtsoildepths,nbtersrf))
649      ALLOCATE(tsurf_tersrf(klon,nbtersrf))
650      ALLOCATE(tsoil_tersrf(klon,nsoilmx,nbtersrf))
651      ALLOCATE(qsurf_tersrf(klon,nbtersrf))
652      ALLOCATE(tsurf_new_tersrf(klon,nbtersrf))
653      ALLOCATE(cdragm_tersrf(klon,nbtersrf))
654      ALLOCATE(cdragh_tersrf(klon,nbtersrf))
655      ALLOCATE(swnet_tersrf(klon,nbtersrf))
656      ALLOCATE(lwnet_tersrf(klon,nbtersrf))
657      ALLOCATE(fluxsens_tersrf(klon,nbtersrf))
658      ALLOCATE(fluxlat_tersrf(klon,nbtersrf))
659
660      ALLOCATE(falb1(klon,nbsrf))
661      ALLOCATE(falb2(klon,nbsrf))
662!albedo SB >>>
663      print*, 'allocate falb'
664      ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf))
665!!      print*, 'allocate falb good', falb_dir(1,1,1)
666      ALLOCATE(chl_con(klon))
667!albedo SB <<<
668      ALLOCATE(rain_fall(klon))
669      ALLOCATE(snow_fall(klon))
670      ALLOCATE(bs_fall(klon))
671      ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon))
672      sollw=0.0
673      ALLOCATE(radsol(klon))
674      ALLOCATE(swradcorr(klon))
675      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
676      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
677
678      ALLOCATE(rugoro(klon))
679      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
680      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev))
681      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon))
682      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
683      ALLOCATE(cf_ancien(klon,klev), qvc_ancien(klon,klev))
684      ALLOCATE(cfc_ancien(klon,klev), qtc_ancien(klon,klev))
685      ALLOCATE(qic_ancien(klon,klev), nic_ancien(klon,klev))
686      ALLOCATE(qvcon(klon,klev), qccon(klon,klev))
687      ALLOCATE(tke_ancien(klon,klev+1))
688!!! Rom P >>>
689      ALLOCATE(tr_ancien(klon,klev,nbtr))
690!!! Rom P <<<
691      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
692      ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev),detrain_cv(klon,klev),fm_cv(klon,klev))
693      ALLOCATE(ratqs(klon,klev))
694      ALLOCATE(pbl_tke(klon,klev+1,nbsrf+1))
695!nrlmd<
696      ALLOCATE(delta_tsurf(klon,nbsrf))
697!>nrlmd
698      ALLOCATE(coefh(klon,klev+1,nbsrf+1))
699      ALLOCATE(coefm(klon,klev+1,nbsrf+1))
700      ! initialize cleanly coefh,coefm
701      ! (most of the time in the code these are assumed to be on klev levels)
702      coefh(:,:,:)=0
703      coefm(:,:,:)=0
704      ALLOCATE(zmax0(klon), f0(klon))
705      ALLOCATE(sig1(klon,klev), w01(klon,klev))
706      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
707      ALLOCATE(detr_therm(klon,klev))
708!     pour phsystoke avec thermiques
709      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
710! radiation outputs
711!FC
712      ALLOCATE(lwtoab(klon,nbands_lw_rrtm), lwtoa0b(klon,nbands_lw_rrtm))
713      lwtoab(:,:)=0.0
714      lwtoa0b(:,:)=0.0
715      ALLOCATE(lwtoab_s2(klon,nbands_lw_rrtm), lwtoa0b_s2(klon,nbands_lw_rrtm))
716      lwtoab_s2(:,:)=0.0
717      lwtoa0b_s2(:,:)=0.0
718      ALLOCATE(lwtoabp(klon,nbands_lw_rrtm), lwtoa0bp(klon,nbands_lw_rrtm))
719      lwtoabp(:,:)=0.0
720      lwtoa0bp(:,:)=0.0
721!FC
722      ALLOCATE(swdnc0(klon,klevp1), swdn0(klon,klevp1), swdn(klon,klevp1))
723      ALLOCATE(swupc0(klon,klevp1), swup0(klon,klevp1), swup(klon,klevp1))
724      ALLOCATE(lwdnc0(klon,klevp1), lwdn0(klon,klevp1), lwdn(klon,klevp1))
725      ALLOCATE(lwupc0(klon,klevp1), lwup0(klon,klevp1), lwup(klon,klevp1))
726      ALLOCATE(SWdn200clr(klon), SWdn200(klon))
727      ALLOCATE(SWup200clr(klon), SWup200(klon))
728      ALLOCATE(LWdn200clr(klon), LWdn200(klon))
729      ALLOCATE(LWup200clr(klon), LWup200(klon))
730      ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon))
731! pressure level
732      ALLOCATE(tsumSTD(klon,nlevSTD,nout))
733      ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout))
734      ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout))
735      ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout))
736      ALLOCATE(tnondef(klon,nlevSTD,nout))
737      ALLOCATE(uvsumSTD(klon,nlevSTD,nout))
738      ALLOCATE(vqsumSTD(klon,nlevSTD,nout))
739      ALLOCATE(vTsumSTD(klon,nlevSTD,nout))
740      ALLOCATE(wqsumSTD(klon,nlevSTD,nout))
741      ALLOCATE(vphisumSTD(klon,nlevSTD,nout))
742      ALLOCATE(wTsumSTD(klon,nlevSTD,nout))
743      ALLOCATE(u2sumSTD(klon,nlevSTD,nout))
744      ALLOCATE(v2sumSTD(klon,nlevSTD,nout))
745      ALLOCATE(T2sumSTD(klon,nlevSTD,nout))
746      ALLOCATE(O3sumSTD(klon,nlevSTD,nout))
747      ALLOCATE(O3daysumSTD(klon,nlevSTD,nout))
748!IM beg
749      ALLOCATE(wlevSTD(klon,nlevSTD), ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD))
750      ALLOCATE(tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD), rhlevSTD(klon,nlevSTD))
751      ALLOCATE(philevSTD(klon,nlevSTD))
752      ALLOCATE(uvSTD(klon,nlevSTD),vqSTD(klon,nlevSTD))
753      ALLOCATE(vTSTD(klon,nlevSTD),wqSTD(klon,nlevSTD))
754      ALLOCATE(vphiSTD(klon,nlevSTD),wTSTD(klon,nlevSTD))
755      ALLOCATE(u2STD(klon,nlevSTD),v2STD(klon,nlevSTD))
756      ALLOCATE(T2STD(klon,nlevSTD))
757      ALLOCATE(O3STD(klon,nlevSTD))
758      ALLOCATE(O3daySTD(klon,nlevSTD))
759!IM end
760      ALLOCATE(seed_old(klon,napisccp))
761      ALLOCATE(zuthe(klon),zvthe(klon))
762      ALLOCATE(alb_neig(klon))
763!GG
764      ALLOCATE(hice(klon))
765      hice(:) = 0.
766      ALLOCATE(tice(klon))
767      tice(:) = 0.
768      ALLOCATE(bilg_cumul(klon))
769      bilg_cumul(:) = 0.
770!GG
771!cloud base mass flux
772      ALLOCATE(ema_cbmf(klon))
773!cloud base pressure & cloud top pressure
774      ALLOCATE(ema_pcb(klon), ema_pct(klon))
775!
776      ALLOCATE(Mipsh(klon,klev))
777      Mipsh(:,:)=0.0
778      ALLOCATE(Ma(klon,klev))
779      ALLOCATE(qcondc(klon,klev))
780      ALLOCATE(wd(klon))
781      ALLOCATE(sigd(klon))
782      ALLOCATE(cin(klon), ALE(klon), ALP(klon))
783      ALLOCATE(ftd(klon,klev), fqd(klon,klev),fqcomp(klon,klev))
784      ALLOCATE(Ale_bl(klon))
785      ALLOCATE(ale_wake(klon))
786      ALLOCATE(ale_bl_stat(klon))
787      ale_bl_stat(:)=0
788      ALLOCATE(Alp_bl(klon))
789      ALLOCATE(lalim_conv(klon))
790      ALLOCATE(wght_th(klon,klev))
791      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
792      ALLOCATE(wake_s(klon), awake_s(klon), wake_dens(klon), awake_dens(klon))
793!!      awake_dens = 0.  ! initialized in phyetat0
794      ALLOCATE(cv_gen(klon))
795      ALLOCATE(wake_Cstar(klon))
796      ALLOCATE(wake_pe(klon), wake_fip(klon))
797!jyg<
798      ALLOCATE(wake_delta_pbl_TKE(klon,klev+1,nbsrf+1))
799!>jyg
800      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
801      ALLOCATE(pfrac_1nucl(klon,klev))
802      ALLOCATE(total_rain(klon), nday_rain(klon))
803      ALLOCATE(ndayrain_mth(klon))
804      ALLOCATE(paire_ter(klon))
805      ALLOCATE(albsol1(klon), albsol2(klon))
806!albedo SB >>>
807      ALLOCATE(albsol_dir(klon,nsw),albsol_dif(klon,nsw))
808!albedo SB <<<
809
810      if (read_climoz <= 1) then
811         ALLOCATE(wo(klon,klev, 1))
812      else
813         ! read_climoz == 2
814         ALLOCATE(wo(klon,klev, 2))
815      end if
816     
817      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
818      ALLOCATE(heat(klon,klev), heat0(klon,klev))
819      ALLOCATE(cool(klon,klev), cool0(klon,klev))
820      ALLOCATE(heat_volc(klon,klev), cool_volc(klon,klev))
821      ALLOCATE(topsw(klon), toplw(klon))
822      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
823      sollwdown = 0.
824      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
825      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
826      sollw0 = 0.
827      ALLOCATE(albpla(klon))
828!IM ajout variables CFMIP2/CMIP5
829      ALLOCATE(heatp(klon,klev), coolp(klon,klev))
830      ALLOCATE(heat0p(klon,klev), cool0p(klon,klev))
831      ALLOCATE(radsolp(klon), topswp(klon), toplwp(klon))
832      ALLOCATE(albplap(klon))
833      ALLOCATE(solswp(klon), solswfdiffp(klon), sollwp(klon))
834      ALLOCATE(gustiness(klon))
835      ALLOCATE(sollwdownp(klon))
836      ALLOCATE(topsw0p(klon),toplw0p(klon))
837      ALLOCATE(solsw0p(klon),sollw0p(klon))
838      ALLOCATE(lwdnc0p(klon,klevp1), lwdn0p(klon,klevp1), lwdnp(klon,klevp1))
839      ALLOCATE(lwupc0p(klon,klevp1), lwup0p(klon,klevp1), lwupp(klon,klevp1))
840      ALLOCATE(swdnc0p(klon,klevp1), swdn0p(klon,klevp1), swdnp(klon,klevp1))
841      ALLOCATE(swupc0p(klon,klevp1), swup0p(klon,klevp1), swupp(klon,klevp1))
842
843!AI Ajout pour Ecrad (3Deffect)       
844      ALLOCATE(heat_s2(klon,klev), cool_s2(klon,klev))
845      ALLOCATE(heat0_s2(klon,klev), cool0_s2(klon,klev))
846      ALLOCATE(radsol_s2(klon), topsw_s2(klon), toplw_s2(klon))
847      ALLOCATE(albpla_s2(klon))
848      ALLOCATE(solsw_s2(klon), solswfdiff_s2(klon), sollw_s2(klon))
849      ALLOCATE(sollwdown_s2(klon),sollwdownclr_s2(klon))
850      ALLOCATE(topsw0_s2(klon),toplw0_s2(klon))
851      ALLOCATE(solsw0_s2(klon),sollw0_s2(klon))
852      ALLOCATE(lwdnc0_s2(klon,klevp1), lwdn0_s2(klon,klevp1), lwdn_s2(klon,klevp1))
853      ALLOCATE(lwupc0_s2(klon,klevp1), lwup0_s2(klon,klevp1), lwup_s2(klon,klevp1))
854      ALLOCATE(swdnc0_s2(klon,klevp1), swdn0_s2(klon,klevp1), swdn_s2(klon,klevp1))
855      ALLOCATE(swupc0_s2(klon,klevp1), swup0_s2(klon,klevp1), swup_s2(klon,klevp1))
856
857      ALLOCATE(cape(klon))
858      ALLOCATE(pbase(klon),bbase(klon))
859      ALLOCATE(zqasc(klon,klev))
860      ALLOCATE(ibas_con(klon), itop_con(klon))
861      ALLOCATE(rain_con(klon), snow_con(klon))
862      ALLOCATE(rlonPOS(klon))
863      ALLOCATE(newsst(klon))
864      ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf),wstar(klon,nbsrf+1))
865      ALLOCATE(topswad(klon), solswad(klon))
866      ALLOCATE(topswai(klon), solswai(klon))
867      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
868      ALLOCATE(tau_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm),piz_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
869      ALLOCATE(cg_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
870      ALLOCATE(tau_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm),piz_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
871      ALLOCATE(cg_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
872      ALLOCATE(ccm(klon,klev,nbands))
873
874#ifdef ISO
875      ALLOCATE(xtsol(niso,klon),fxtevap(ntraciso,klon,nbsrf))
876      ALLOCATE(fxtd(ntraciso,klon,klev))
877      ALLOCATE(wake_deltaxt(ntraciso,klon,klev))
878      ALLOCATE(xt_ancien(ntraciso,klon,klev))
879      ALLOCATE(xtl_ancien(ntraciso,klon,klev))
880      ALLOCATE(xts_ancien(ntraciso,klon,klev))
881      ALLOCATE(xtbs_ancien(ntraciso,klon,klev))
882      ALLOCATE(xtrain_fall(ntraciso,klon))
883      ALLOCATE(xtsnow_fall(ntraciso,klon))
884      ALLOCATE(xtrain_con(ntraciso,klon))
885      ALLOCATE(xtsnow_con(ntraciso,klon))
886#ifdef ISOTRAC
887      ALLOCATE(bassin_map(klon))
888      ALLOCATE(boite_map(klon,klev)) 
889#endif     
890#endif
891
892      ALLOCATE(ale_bl_trig(klon))
893      ALLOCATE(ratqs_inter_(klon,klev),sigma_qtherm(klon,klev))
894      IF (ok_gwd_rando) THEN
895        ALLOCATE(du_gwd_rando(klon, klev))
896        du_gwd_rando(:,:)=0.
897      ENDIF
898      IF (.not. ok_hines .and. ok_gwd_rando) THEN
899        ALLOCATE(du_gwd_front(klon, klev))
900        du_gwd_front(:,:) = 0 !ym missing init   
901      ENDIF
902
903      if (activate_ocean_skin >= 1) then
904         ALLOCATE(delta_sal(klon), ds_ns(klon), dt_ns(klon), delta_sst(klon), &
905              dter(klon), dser(klon))
906         if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
907              allocate(dt_ds(klon))
908      end if
909
910    END SUBROUTINE phys_state_var_init
911
912!======================================================================
913    SUBROUTINE phys_state_var_end
914      ! Useful only for lmdz1d.
915      USE clesphys_mod_h
916USE indice_sol_mod
917use config_ocean_skin_m, only: activate_ocean_skin
918use surface_data, only: type_ocean
919IMPLICIT NONE
920
921      DEALLOCATE(pctsrf, ftsol, falb1, falb2)
922      DEALLOCATE(beta_aridity)
923      DEALLOCATE(qsol,fevap,z0m,z0h,agesno)
924!FC
925      DEALLOCATE(treedrg)
926!AM
927      DEALLOCATE(frac_tersrf)
928      DEALLOCATE(z0m_tersrf)
929      DEALLOCATE(ratio_z0m_z0h_tersrf)
930      DEALLOCATE(albedo_tersrf)
931      DEALLOCATE(beta_tersrf)
932      DEALLOCATE(inertie_tersrf)
933      DEALLOCATE(hcond_tersrf)
934      DEALLOCATE(tsurfi_tersrf)
935      DEALLOCATE(tsoili_tersrf)
936      DEALLOCATE(tsoil_depth)
937      DEALLOCATE(tsurf_tersrf)
938      DEALLOCATE(tsoil_tersrf)
939      DEALLOCATE(qsurf_tersrf)
940      DEALLOCATE(tsurf_new_tersrf)
941      DEALLOCATE(cdragm_tersrf)
942      DEALLOCATE(cdragh_tersrf)
943      DEALLOCATE(swnet_tersrf)
944      DEALLOCATE(lwnet_tersrf)
945      DEALLOCATE(fluxsens_tersrf)
946      DEALLOCATE(fluxlat_tersrf)
947      DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr)
948      DEALLOCATE(zmea, zstd, zsig, zgam)
949      DEALLOCATE(zthe, zpic, zval)
950      DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
951      DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien)
952      DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
953      DEALLOCATE(qtc_cv,sigt_cv,detrain_cv,fm_cv)
954      DEALLOCATE(u_ancien, v_ancien)
955      DEALLOCATE(cf_ancien, qvc_ancien)
956      DEALLOCATE(cfc_ancien, qtc_ancien, qic_ancien, nic_ancien)
957      DEALLOCATE(qvcon, qccon)
958      DEALLOCATE(tke_ancien)
959      DEALLOCATE(tr_ancien)                           !RomP
960      DEALLOCATE(ratqs, pbl_tke,coefh,coefm)
961      DEALLOCATE(zmax0, f0)
962      DEALLOCATE(sig1, w01)
963      DEALLOCATE(entr_therm, fm_therm)
964      DEALLOCATE(detr_therm)
965      DEALLOCATE(clwcon0th, rnebcon0th)
966! radiation outputs
967!FC
968      DEALLOCATE(lwtoab, lwtoa0b)
969      DEALLOCATE(lwtoab_s2, lwtoa0b_s2)
970      DEALLOCATE(lwtoabp, lwtoa0bp)
971!FC
972      DEALLOCATE(swdnc0, swdn0, swdn)
973      DEALLOCATE(swupc0, swup0, swup)
974      DEALLOCATE(lwdnc0, lwdn0, lwdn)
975      DEALLOCATE(lwupc0, lwup0, lwup)
976      DEALLOCATE(SWdn200clr, SWdn200)
977      DEALLOCATE(SWup200clr, SWup200)
978      DEALLOCATE(LWdn200clr, LWdn200)
979      DEALLOCATE(LWup200clr, LWup200)
980      DEALLOCATE(LWdnTOA, LWdnTOAclr)
981! pressure level
982      DEALLOCATE(tsumSTD)
983      DEALLOCATE(usumSTD, vsumSTD)
984      DEALLOCATE(wsumSTD, phisumSTD)
985      DEALLOCATE(tnondef)
986      DEALLOCATE(qsumSTD, rhsumSTD)
987      DEALLOCATE(uvsumSTD)
988      DEALLOCATE(vqsumSTD)
989      DEALLOCATE(vTsumSTD)
990      DEALLOCATE(wqsumSTD)
991      DEALLOCATE(vphisumSTD)
992      DEALLOCATE(wTsumSTD)
993      DEALLOCATE(u2sumSTD)
994      DEALLOCATE(v2sumSTD)
995      DEALLOCATE(T2sumSTD)
996      DEALLOCATE(O3sumSTD)
997      DEALLOCATE(O3daysumSTD)
998!IM beg
999      DEALLOCATE(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD)
1000      DEALLOCATE(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD)
1001!IM end
1002      DEALLOCATE(seed_old)
1003      DEALLOCATE(zuthe, zvthe)
1004      DEALLOCATE(alb_neig)
1005!GG
1006      DEALLOCATE(hice)
1007      DEALLOCATE(tice)
1008      DEALLOCATE(bilg_cumul)
1009!GG
1010      DEALLOCATE(ema_cbmf)
1011      DEALLOCATE(ema_pcb, ema_pct)
1012      DEALLOCATE(Mipsh, Ma, qcondc)
1013      DEALLOCATE(wd, sigd)
1014      DEALLOCATE(cin, ALE, ALP)
1015      DEALLOCATE(ftd, fqd, fqcomp)
1016      DEALLOCATE(Ale_bl, Alp_bl)
1017      DEALLOCATE(ale_wake)
1018      DEALLOCATE(ale_bl_stat)
1019      DEALLOCATE(lalim_conv, wght_th)
1020      DEALLOCATE(wake_deltat, wake_deltaq)
1021      DEALLOCATE(wake_s, awake_s, wake_dens, awake_dens)
1022      DEALLOCATE(cv_gen)
1023      DEALLOCATE(wake_Cstar, wake_pe, wake_fip)
1024!jyg<
1025      DEALLOCATE(wake_delta_pbl_TKE)
1026!nrlmd<
1027      DEALLOCATE(delta_tsurf)
1028!>nrlmd
1029!>jyg
1030      DEALLOCATE(pfrac_impa, pfrac_nucl)
1031      DEALLOCATE(pfrac_1nucl)
1032      DEALLOCATE(total_rain, nday_rain)
1033      DEALLOCATE(ndayrain_mth)
1034      DEALLOCATE(paire_ter)
1035      DEALLOCATE(albsol1, albsol2)
1036!albedo SB >>>
1037      DEALLOCATE(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con)
1038!albedo SB <<<
1039      DEALLOCATE(wo)
1040      DEALLOCATE(clwcon0,rnebcon0)
1041      DEALLOCATE(heat, heat0)
1042      DEALLOCATE(cool, cool0)
1043      DEALLOCATE(heat_volc, cool_volc)
1044      DEALLOCATE(topsw, toplw)
1045      DEALLOCATE(sollwdown, sollwdownclr)
1046      DEALLOCATE(gustiness)
1047      DEALLOCATE(toplwdown, toplwdownclr)
1048      DEALLOCATE(topsw0,toplw0,solsw0,sollw0)
1049      DEALLOCATE(albpla)
1050
1051!AI Ajout pour Ecrad (3Deffect)
1052      DEALLOCATE(heat_s2, cool_s2)
1053      DEALLOCATE(heat0_s2, cool0_s2)
1054      DEALLOCATE(radsol_s2, topsw_s2, toplw_s2)
1055      DEALLOCATE(albpla_s2)
1056      DEALLOCATE(solsw_s2, solswfdiff_s2, sollw_s2)
1057      DEALLOCATE(sollwdown_s2, sollwdownclr_s2)
1058      DEALLOCATE(topsw0_s2,toplw0_s2)
1059      DEALLOCATE(solsw0_s2,sollw0_s2)
1060      DEALLOCATE(lwdnc0_s2, lwdn0_s2, lwdn_s2)
1061      DEALLOCATE(lwupc0_s2, lwup0_s2, lwup_s2)
1062      DEALLOCATE(swdnc0_s2, swdn0_s2, swdn_s2)
1063      DEALLOCATE(swupc0_s2, swup0_s2, swup_s2)
1064
1065!IM ajout variables CFMIP2/CMIP5
1066      DEALLOCATE(heatp, coolp)
1067      DEALLOCATE(heat0p, cool0p)
1068      DEALLOCATE(radsolp, topswp, toplwp)
1069      DEALLOCATE(albplap)
1070      DEALLOCATE(solswp, solswfdiffp, sollwp)
1071      DEALLOCATE(sollwdownp)
1072      DEALLOCATE(topsw0p,toplw0p)
1073      DEALLOCATE(solsw0p,sollw0p)
1074      DEALLOCATE(lwdnc0p, lwdn0p, lwdnp)
1075      DEALLOCATE(lwupc0p, lwup0p, lwupp)
1076      DEALLOCATE(swdnc0p, swdn0p, swdnp)
1077      DEALLOCATE(swupc0p, swup0p, swupp)
1078      DEALLOCATE(cape)
1079      DEALLOCATE(pbase,bbase)
1080      DEALLOCATE(zqasc)
1081      DEALLOCATE(ibas_con, itop_con)
1082      DEALLOCATE(rain_con, snow_con)
1083      DEALLOCATE(rlonPOS)
1084      DEALLOCATE(newsst)
1085      DEALLOCATE(ustar,u10m, v10m,wstar)
1086      DEALLOCATE(topswad, solswad)
1087      DEALLOCATE(topswai, solswai)
1088      DEALLOCATE(tau_aero,piz_aero,cg_aero)
1089      DEALLOCATE(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)
1090      DEALLOCATE(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm)
1091      DEALLOCATE(ccm)
1092      if (ok_gwd_rando) DEALLOCATE(du_gwd_rando)
1093      if (.not. ok_hines .and. ok_gwd_rando) DEALLOCATE(du_gwd_front)
1094      DEALLOCATE(ale_bl_trig)
1095      DEALLOCATE(ratqs_inter_,sigma_qtherm)
1096
1097      if (activate_ocean_skin >= 1) then
1098         deALLOCATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser)
1099         if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
1100              deALLOCATE(dt_ds)
1101      end if
1102
1103#ifdef ISO   
1104      DEALLOCATE(xtsol,fxtevap) 
1105      DEALLOCATE(xt_ancien,xtl_ancien,xts_ancien,xtbs_ancien, fxtd, wake_deltaxt)
1106      DEALLOCATE(xtrain_fall, xtsnow_fall, xtrain_con, xtsnow_con)
1107#ifdef ISOTRAC
1108      DEALLOCATE(bassin_map,boite_map)
1109#endif       
1110#endif
1111      is_initialized=.FALSE.
1112     
1113END SUBROUTINE phys_state_var_end
1114
1115      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.