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

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

Merge with trunk r5789

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