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

Last change on this file since 5685 was 5685, checked in by fhourdin, 12 days ago

Correction/nettoyage sorties en pression

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