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

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

Major modifs to treatment of contrails (from 2 classes to 2 moments) + diagnostics. Increased numerical efficiency

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