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

Last change on this file since 5649 was 5627, checked in by amaison, 2 months ago

Representation of heterogeneous continental subsurfaces with parameter or flux aggregation in the simplified surface model (bucket) for 1D case studies.

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