source: LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90 @ 5833

Last change on this file since 5833 was 5776, checked in by evignon, 4 months ago

ajout de l'advection horizontale de la TKE. Travaux dans le cadre de la these de Valentin Wiener

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