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

Last change on this file since 5761 was 5717, checked in by aborella, 4 weeks ago

Merge with trunk r5653

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