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
RevLine 
[1403]1!
2! $Id: phys_state_var_mod.F90 5627 2025-04-25 12:21:02Z lebasn $
3!
[909]4      MODULE phys_state_var_mod
5! Variables sauvegardees pour le startphy.nc
6!======================================================================
7!
8!
9!======================================================================
10! Declaration des variables
11      USE dimphy
[5627]12      USE dimsoil_mod_h, ONLY: nsoilmx
[5084]13      USE netcdf, only: nf90_fill_real
[952]14      INTEGER, PARAMETER :: nlevSTD=17
[1352]15      INTEGER, PARAMETER :: nlevSTD8=8
16      INTEGER, PARAMETER :: nlevSTD3=3
[952]17      INTEGER, PARAMETER :: nout=3
18      INTEGER, PARAMETER :: napisccp=1
[3150]19      INTEGER, SAVE :: radpas  ! radiation is called every "radpas" step
20      INTEGER, SAVE :: cvpas   ! convection is called every "cvpas" step
[3435]21      INTEGER, SAVE :: cvpas_0 = 1 ! reference value for cvpas
[3150]22      INTEGER, SAVE :: wkpas   ! wake scheme is called every "wkpas" step
[2271]23      REAL, PARAMETER :: missing_val_nf90=nf90_fill_real
[1352]24!$OMP THREADPRIVATE(radpas)
[2707]25!$OMP THREADPRIVATE(cvpas)
[3150]26!$OMP THREADPRIVATE(cvpas_0)
[2730]27!$OMP THREADPRIVATE(wkpas)
[3435]28      REAL, SAVE :: phys_tstep=0, solaire_etat0
29!$OMP THREADPRIVATE(phys_tstep, solaire_etat0)
[967]30
[2399]31      REAL, ALLOCATABLE, SAVE :: pctsrf(:,:)
32!$OMP THREADPRIVATE(pctsrf)
[909]33      REAL, ALLOCATABLE, SAVE :: ftsol(:,:)
[967]34!$OMP THREADPRIVATE(ftsol)
[3888]35      REAL, ALLOCATABLE, SAVE :: beta_aridity(:,:)
36!$OMP THREADPRIVATE(beta_aridity)
[2243]37      REAL,ALLOCATABLE,SAVE :: qsol(:),fevap(:,:),z0m(:,:),z0h(:,:),agesno(:,:)
38!$OMP THREADPRIVATE(qsol,fevap,z0m,z0h,agesno)
[2952]39!FC drag des arbres
40      REAL, ALLOCATABLE, SAVE :: treedrg(:,:,:)
41!$OMP THREADPRIVATE(treedrg)
[5627]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)
[2952]87
[967]88!      character(len=6), SAVE :: ocean
89!!!!!!$OMP THREADPRIVATE(ocean)
90!      logical, SAVE :: ok_veget
91!!!!!!$OMP THREADPRIVATE(ok_veget)
[909]92      REAL, ALLOCATABLE, SAVE :: falb1(:,:), falb2(:,:)
[967]93!$OMP THREADPRIVATE(falb1, falb2)
[2227]94
95!albedo SB >>>
96      REAL, ALLOCATABLE, SAVE :: falb_dif(:,:,:), falb_dir(:,:,:)
[3756]97      REAL, ALLOCATABLE, SAVE :: chl_con(:)
[2227]98!$OMP THREADPRIVATE(falb_dir,falb_dif,chl_con)
99!albedo SB <<<
100
101
[4523]102      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:), bs_fall(:)
103!$OMP THREADPRIVATE( rain_fall, snow_fall, bs_fall)
[3756]104      REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:)
105!$OMP THREADPRIVATE(solsw, solswfdiff, sollw)
[909]106      REAL, ALLOCATABLE, SAVE :: radsol(:)
[967]107!$OMP THREADPRIVATE(radsol)
[2366]108      REAL, ALLOCATABLE, SAVE :: swradcorr(:)
109!$OMP THREADPRIVATE(swradcorr)
[4088]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
[967]116
[909]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(:)
[967]122!$OMP THREADPRIVATE(zmea, zstd, zsig, zgam)
[909]123      REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:)
[967]124!$OMP THREADPRIVATE(zthe, zpic, zval)
[909]125!     REAL tabcntr0(100)
126      REAL, ALLOCATABLE, SAVE :: rugoro(:)
[967]127!$OMP THREADPRIVATE(rugoro)
[909]128      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
[967]129!$OMP THREADPRIVATE(t_ancien, q_ancien)
[4523]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)
[4088]134#ifdef ISO
[5394]135      REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:), xtbs_ancien(:,:,:)
[4984]136!$OMP THREADPRIVATE(xt_ancien,xtl_ancien,xts_ancien,xtbs_ancien)
[4088]137#endif
[1054]138      REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
139!$OMP THREADPRIVATE(u_ancien, v_ancien)
[5204]140      REAL, ALLOCATABLE, SAVE :: cf_ancien(:,:), rvc_ancien(:,:)
141!$OMP THREADPRIVATE(cf_ancien, rvc_ancien)
[1742]142!!! RomP >>>
143      REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:)
144!$OMP THREADPRIVATE(tr_ancien)
145!!! RomP <<<
[909]146      LOGICAL, SAVE :: ancien_ok
[967]147!$OMP THREADPRIVATE(ancien_ok)
[909]148      REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:)
[967]149!$OMP THREADPRIVATE(clwcon,rnebcon)
[4613]150      REAL, ALLOCATABLE, SAVE :: qtc_cv(:,:),sigt_cv(:,:),detrain_cv(:,:),fm_cv(:,:)
151!$OMP THREADPRIVATE(qtc_cv,sigt_cv,detrain_cv,fm_cv)
[909]152      REAL, ALLOCATABLE, SAVE :: ratqs(:,:)
[967]153!$OMP THREADPRIVATE(ratqs)
[909]154      REAL, ALLOCATABLE, SAVE :: pbl_tke(:,:,:) ! turb kinetic energy
[1761]155      REAL, ALLOCATABLE, SAVE :: coefh(:,:,:) ! Kz enthalpie
156      REAL, ALLOCATABLE, SAVE :: coefm(:,:,:) ! Kz momentum
157!$OMP THREADPRIVATE(pbl_tke, coefh,coefm)
[927]158      REAL, ALLOCATABLE, SAVE :: zmax0(:), f0(:) !
[967]159!$OMP THREADPRIVATE(zmax0,f0)
[1827]160      REAL, ALLOCATABLE, SAVE :: sig1(:,:), w01(:,:)
161!$OMP THREADPRIVATE(sig1,w01)
[942]162      REAL, ALLOCATABLE, SAVE :: entr_therm(:,:), fm_therm(:,:)
[967]163!$OMP THREADPRIVATE(entr_therm,fm_therm)
[952]164      REAL, ALLOCATABLE, SAVE :: detr_therm(:,:)
[967]165!$OMP THREADPRIVATE(detr_therm)
[952]166!IM 150408
167!     pour phsystoke avec thermiques
168      REAL,ALLOCATABLE,SAVE :: clwcon0th(:,:),rnebcon0th(:,:)
[967]169!$OMP THREADPRIVATE(clwcon0th,rnebcon0th)
[952]170! radiation outputs
[3082]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)
[952]175      REAL,ALLOCATABLE,SAVE :: SWdn200clr(:), SWdn200(:)
[967]176!$OMP THREADPRIVATE(SWdn200clr,SWdn200)
[952]177      REAL,ALLOCATABLE,SAVE :: SWup200clr(:), SWup200(:)
[967]178!$OMP THREADPRIVATE(SWup200clr,SWup200)
[3106]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)
[952]183      REAL,ALLOCATABLE,SAVE :: LWdn200clr(:), LWdn200(:)
[967]184!$OMP THREADPRIVATE(LWdn200clr,LWdn200)
[952]185      REAL,ALLOCATABLE,SAVE :: LWup200clr(:), LWup200(:)
[967]186!$OMP THREADPRIVATE(LWup200clr,LWup200)
[952]187      REAL,ALLOCATABLE,SAVE :: LWdnTOA(:), LWdnTOAclr(:)
[967]188!$OMP THREADPRIVATE(LWdnTOA,LWdnTOAclr)
[952]189! pressure level
190      REAL,ALLOCATABLE,SAVE :: tsumSTD(:,:,:)
[967]191!$OMP THREADPRIVATE(tsumSTD)
[952]192      REAL,ALLOCATABLE,SAVE :: usumSTD(:,:,:), vsumSTD(:,:,:)
[967]193!$OMP THREADPRIVATE(usumSTD,vsumSTD)
[952]194      REAL,ALLOCATABLE,SAVE :: wsumSTD(:,:,:), phisumSTD(:,:,:)
[967]195!$OMP THREADPRIVATE(wsumSTD,phisumSTD)
[952]196      REAL,ALLOCATABLE,SAVE :: qsumSTD(:,:,:), rhsumSTD(:,:,:)
[967]197!$OMP THREADPRIVATE(qsumSTD,rhsumSTD)
[952]198      REAL,ALLOCATABLE,SAVE :: tnondef(:,:,:)
[967]199!$OMP THREADPRIVATE(tnondef)
[952]200      REAL,ALLOCATABLE,SAVE :: uvsumSTD(:,:,:)
[967]201!$OMP THREADPRIVATE(uvsumSTD)
[952]202      REAL,ALLOCATABLE,SAVE :: vqsumSTD(:,:,:)
[967]203!$OMP THREADPRIVATE(vqsumSTD)
[952]204      REAL,ALLOCATABLE,SAVE :: vTsumSTD(:,:,:)
[967]205!$OMP THREADPRIVATE(vTsumSTD)
[952]206      REAL,ALLOCATABLE,SAVE :: wqsumSTD(:,:,:)
[967]207!$OMP THREADPRIVATE(wqsumSTD)
[952]208      REAL,ALLOCATABLE,SAVE :: vphisumSTD(:,:,:)
[967]209!$OMP THREADPRIVATE(vphisumSTD)
[952]210      REAL,ALLOCATABLE,SAVE :: wTsumSTD(:,:,:)
[967]211!$OMP THREADPRIVATE(wTsumSTD)
[952]212      REAL,ALLOCATABLE,SAVE :: u2sumSTD(:,:,:)
[967]213!$OMP THREADPRIVATE(u2sumSTD)
[952]214      REAL,ALLOCATABLE,SAVE :: v2sumSTD(:,:,:)
[967]215!$OMP THREADPRIVATE(v2sumSTD)
[952]216      REAL,ALLOCATABLE,SAVE :: T2sumSTD(:,:,:)
[967]217!$OMP THREADPRIVATE(T2sumSTD)
[1398]218      REAL,ALLOCATABLE,SAVE :: O3sumSTD(:,:,:), O3daysumSTD(:,:,:)
219!$OMP THREADPRIVATE(O3sumSTD,O3daysumSTD)
[1352]220!IM begin
221      REAL,ALLOCATABLE,SAVE :: wlevSTD(:,:), ulevSTD(:,:), vlevSTD(:,:)
[1362]222!$OMP THREADPRIVATE(wlevSTD,ulevSTD,vlevSTD)
[1352]223      REAL,ALLOCATABLE,SAVE :: tlevSTD(:,:), qlevSTD(:,:), rhlevSTD(:,:)
[1362]224!$OMP THREADPRIVATE(tlevSTD,qlevSTD,rhlevSTD)
[1352]225      REAL,ALLOCATABLE,SAVE :: philevSTD(:,:)
[1362]226!$OMP THREADPRIVATE(philevSTD)
[1352]227      REAL,ALLOCATABLE,SAVE :: uvSTD(:,:)
[1362]228!$OMP THREADPRIVATE(uvSTD)
[1352]229      REAL,ALLOCATABLE,SAVE :: vqSTD(:,:)
[1362]230!$OMP THREADPRIVATE(vqSTD)
[1352]231      REAL,ALLOCATABLE,SAVE :: vTSTD(:,:)
[1362]232!$OMP THREADPRIVATE(vTSTD)
[1352]233      REAL,ALLOCATABLE,SAVE :: wqSTD(:,:)
[1362]234!$OMP THREADPRIVATE(wqSTD)
[1352]235      REAL,ALLOCATABLE,SAVE :: vphiSTD(:,:)
[1362]236!$OMP THREADPRIVATE(vphiSTD)
[1352]237      REAL,ALLOCATABLE,SAVE :: wTSTD(:,:)
[1362]238!$OMP THREADPRIVATE(wTSTD)
[1352]239      REAL,ALLOCATABLE,SAVE :: u2STD(:,:)
[1362]240!$OMP THREADPRIVATE(u2STD)
[1352]241      REAL,ALLOCATABLE,SAVE :: v2STD(:,:)
[1362]242!$OMP THREADPRIVATE(v2STD)
[1352]243      REAL,ALLOCATABLE,SAVE :: T2STD(:,:)
[1362]244!$OMP THREADPRIVATE(T2STD)
[1398]245      REAL,ALLOCATABLE,SAVE :: O3STD(:,:), O3daySTD(:,:)
246!$OMP THREADPRIVATE(O3STD,O3daySTD)
[1352]247!IM end
[952]248      INTEGER,ALLOCATABLE,SAVE :: seed_old(:,:)
[967]249!$OMP THREADPRIVATE(seed_old)
[952]250      REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:)
[967]251!$OMP THREADPRIVATE(zuthe,zvthe)
[952]252      REAL,ALLOCATABLE,SAVE :: alb_neig(:)
[967]253!$OMP THREADPRIVATE(alb_neig)
[952]254!cloud base mass flux
[1398]255      REAL,ALLOCATABLE,SAVE :: ema_cbmf(:)
256!$OMP THREADPRIVATE(ema_cbmf)
[952]257!cloud base pressure & cloud top pressure
258      REAL,ALLOCATABLE,SAVE :: ema_pcb(:), ema_pct(:)
[967]259!$OMP THREADPRIVATE(ema_pcb,ema_pct)
[3496]260      REAL,ALLOCATABLE,SAVE :: Mipsh(:,:)     ! mass flux shed from  adiab. ascents
261!$OMP THREADPRIVATE(Mipsh)
262      REAL,ALLOCATABLE,SAVE :: Ma(:,:)       ! undilute upward mass flux
[967]263!$OMP THREADPRIVATE(Ma)
[952]264      REAL,ALLOCATABLE,SAVE :: qcondc(:,:)    ! in-cld water content from convect
[967]265!$OMP THREADPRIVATE(qcondc)
[952]266      REAL,ALLOCATABLE,SAVE :: wd(:) ! sb
[967]267!$OMP THREADPRIVATE(wd)
[952]268      REAL,ALLOCATABLE,SAVE :: sigd(:)
[967]269!$OMP THREADPRIVATE(sigd)
[952]270!
271      REAL,ALLOCATABLE,SAVE :: cin(:)
[967]272!$OMP THREADPRIVATE(cin)
[2635]273! ftd : convective heating due to unsaturated downdraughts
[952]274      REAL,ALLOCATABLE,SAVE :: ftd(:,:)
[967]275!$OMP THREADPRIVATE(ftd)
[2635]276! fqd : convective moistening due to unsaturated downdraughts
[4613]277      REAL,ALLOCATABLE,SAVE :: fqd(:,:),fqcomp(:,:)     
278!$OMP THREADPRIVATE(fqd,fqcomp)
[4088]279#ifdef ISO
280      REAL, ALLOCATABLE, SAVE :: fxtd(:,:,:)
281!$OMP THREADPRIVATE(fxtd)
282#endif
[952]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(:)
[967]288!$OMP THREADPRIVATE(ALE)
[952]289!ALP : Puissance  disponible pour soulevement
290      REAL,ALLOCATABLE,SAVE :: ALP(:)
[967]291!$OMP THREADPRIVATE(ALP)
[952]292!
293! nouvelles variables pour le couplage convection-couche limite
294      REAL,ALLOCATABLE,SAVE :: Ale_bl(:)
[967]295!$OMP THREADPRIVATE(Ale_bl)
[952]296      REAL,ALLOCATABLE,SAVE :: Alp_bl(:)
[967]297!$OMP THREADPRIVATE(Alp_bl)
[952]298      INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:)
[967]299!$OMP THREADPRIVATE(lalim_conv)
[952]300      REAL,ALLOCATABLE,SAVE :: wght_th(:,:)
[967]301!$OMP THREADPRIVATE(wght_th)
[3080]302      REAL,ALLOCATABLE,SAVE    :: ale_wake(:)
303!$OMP THREADPRIVATE(ale_wake)
304      REAL,ALLOCATABLE,SAVE    :: ale_bl_stat(:)
305!$OMP THREADPRIVATE(ale_bl_stat)
[952]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
[2635]310! wake_s      : fraction surfacique occupee par la poche froide
[4744]311! awake_s     : surface fraction covered by active wakes
312! wake_dens   : number of wakes per unit area
[3208]313! awake_dens  : number of active wakes per unit area
[3956]314! cv_gen      : birth rate of cumulonimbus per unit area.
[2635]315! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
[952]316! wake_Cstar  : vitesse d'etalement de la poche
[1403]317! wake_pe     : wake potential energy - WAPE
[952]318! wake_fip    : Gust Front Impinging power - ALP
319      REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:)
[967]320!$OMP THREADPRIVATE(wake_deltat)
[952]321      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
[967]322!$OMP THREADPRIVATE(wake_deltaq)
[4088]323#ifdef ISO
324      REAL, ALLOCATABLE, SAVE :: wake_deltaxt(:,:,:)
325!$OMP THREADPRIVATE(wake_deltaxt)
326#endif
[4744]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)
[3956]331      REAL,ALLOCATABLE,SAVE :: cv_gen(:)
332!$OMP THREADPRIVATE(cv_gen)
[952]333      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
[967]334!$OMP THREADPRIVATE(wake_Cstar)
[1403]335      REAL,ALLOCATABLE,SAVE :: wake_pe(:)
336!$OMP THREADPRIVATE(wake_pe)
[952]337      REAL,ALLOCATABLE,SAVE :: wake_fip(:)
[967]338!$OMP THREADPRIVATE(wake_fip)
[952]339!
[2159]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)
[3888]346!nrlmd<
347      REAL, ALLOCATABLE, SAVE :: delta_tsurf(:,:) ! Surface temperature difference inside-outside cold pool
348!$OMP THREADPRIVATE(delta_tsurf)
349!>nrlmd
[2159]350!>jyg
351!
[952]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(:,:)
[967]356!$OMP THREADPRIVATE(pfrac_impa,pfrac_nucl)
[952]357      REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:)
[967]358!$OMP THREADPRIVATE(pfrac_1nucl)
[952]359!
360      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
[967]361!$OMP THREADPRIVATE(total_rain,nday_rain)
[4556]362      REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:)
363!$OMP THREADPRIVATE(ndayrain_mth)
[3435]364      REAL,ALLOCATABLE,SAVE :: paire_ter(:)
365!$OMP THREADPRIVATE(paire_ter)
[952]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(:)
[967]369!$OMP THREADPRIVATE(albsol1,albsol2)
[1279]370
[2227]371!albedo SB >>>
372      REAL,ALLOCATABLE,SAVE :: albsol_dif(:,:),albsol_dir(:,:)
373!$OMP THREADPRIVATE(albsol_dif,albsol_dir)
374!albedo SB <<<
375
376
[1279]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
[952]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
[3479]392! heat_volc : chauffage solaire du au volcanisme
393! cool_volc : refroidissement infrarouge du au volcanisme
[952]394      REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:)
[967]395!$OMP THREADPRIVATE(clwcon0,rnebcon0)
[952]396      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
[967]397!$OMP THREADPRIVATE(heat)
[952]398      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
[967]399!$OMP THREADPRIVATE(heat0)
[952]400      REAL,ALLOCATABLE,SAVE :: cool(:,:)
[967]401!$OMP THREADPRIVATE(cool)
[952]402      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
[967]403!$OMP THREADPRIVATE(cool0)
[3479]404      REAL,ALLOCATABLE,SAVE :: heat_volc(:,:)   
405!$OMP THREADPRIVATE(heat_volc)
406      REAL,ALLOCATABLE,SAVE :: cool_volc(:,:)
407!$OMP THREADPRIVATE(cool_volc)
[952]408      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
[967]409!$OMP THREADPRIVATE(topsw,toplw)
[952]410      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
[967]411!$OMP THREADPRIVATE(sollwdown)
[2240]412      REAL,ALLOCATABLE,SAVE :: gustiness(:)
413!$OMP THREADPRIVATE(gustiness)
[952]414      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
[967]415!$OMP THREADPRIVATE(sollwdownclr)
[952]416      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
[967]417!$OMP THREADPRIVATE(toplwdown)
[952]418      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
[967]419!$OMP THREADPRIVATE(toplwdownclr)
[952]420      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
[967]421!$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0)
[952]422      REAL,ALLOCATABLE,SAVE :: albpla(:)
[967]423!$OMP THREADPRIVATE(albpla)
[1539]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)
[3756]434      REAL,ALLOCATABLE,SAVE :: solswp(:), solswfdiffp(:), sollwp(:)
435!$OMP THREADPRIVATE(solswp, solswfdiffp, sollwp)
[1539]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)
[3106]441      REAL,ALLOCATABLE,SAVE :: lwdnc0p(:,:), lwdn0p(:,:), lwdnp(:,:)
442      REAL,ALLOCATABLE,SAVE :: lwupc0p(:,:), lwup0p(:,:), lwupp(:,:)
443!$OMP THREADPRIVATE(lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp)
[3082]444      REAL,ALLOCATABLE,SAVE :: swdnc0p(:,:), swdn0p(:,:), swdnp(:,:)
445      REAL,ALLOCATABLE,SAVE :: swupc0p(:,:), swup0p(:,:), swupp(:,:)
446!$OMP THREADPRIVATE(swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp)
[1539]447
[4677]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)
[4773]459      REAL,ALLOCATABLE,SAVE :: sollwdown_s2(:), sollwdownclr_s2(:)
460!$OMP THREADPRIVATE(sollwdown_s2, sollwdownclr_s2)
[4677]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
[952]471! pbase : cloud base pressure
472! bbase : cloud base buoyancy
473      REAL,ALLOCATABLE,SAVE :: cape(:)
[967]474!$OMP THREADPRIVATE(cape)
[952]475      REAL,ALLOCATABLE,SAVE :: pbase(:)
[967]476!$OMP THREADPRIVATE(pbase)
[952]477      REAL,ALLOCATABLE,SAVE :: bbase(:)
[967]478!$OMP THREADPRIVATE(bbase)
[952]479!
480      REAL,SAVE,ALLOCATABLE :: zqasc(:,:)
[967]481!$OMP THREADPRIVATE( zqasc)
[952]482      INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:)
[967]483!$OMP THREADPRIVATE(ibas_con,itop_con)
[952]484      REAL,SAVE,ALLOCATABLE :: rain_con(:)
[967]485!$OMP THREADPRIVATE(rain_con)
[952]486      REAL,SAVE,ALLOCATABLE :: snow_con(:)
[967]487!$OMP THREADPRIVATE(snow_con)
[952]488!
[4088]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
[952]495      REAL,SAVE,ALLOCATABLE :: rlonPOS(:)
[967]496!$OMP THREADPRIVATE(rlonPOS)
[952]497      REAL,SAVE,ALLOCATABLE :: newsst(:)
[967]498!$OMP THREADPRIVATE(newsst)
[1813]499      REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:),wstar(:,:)
500!$OMP THREADPRIVATE(ustar,u10m,v10m,wstar)
[952]501!
502! ok_ade=T -ADE=topswad-topsw
503! ok_aie=T ->
504!       ok_ade=T -AIE=topswai-topswad
[1279]505!       ok_ade=F -AIE=topswai-topsw
[952]506!
507!topswad, solswad : Aerosol direct effect
508      REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:)
[967]509!$OMP THREADPRIVATE(topswad,solswad)
[952]510!topswai, solswai : Aerosol indirect effect
511      REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:)
[967]512!$OMP THREADPRIVATE(topswai,solswai)
[959]513
[1279]514      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
515!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
[2146]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)
[952]520      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
[967]521!$OMP THREADPRIVATE(ccm)
[952]522
[1638]523      REAL,SAVE,ALLOCATABLE :: ale_bl_trig(:)
524!$OMP THREADPRIVATE(ale_bl_trig)
525
[5208]526      REAL,SAVE,ALLOCATABLE :: ratqs_inter_(:,:),sigma_qtherm(:,:)
527!$OMP THREADPRIVATE(ratqs_inter_,sigma_qtherm)
[3856]528
[4088]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
[2333]537      REAL, ALLOCATABLE, SAVE:: du_gwd_rando(:, :), du_gwd_front(:, :)
538      !$OMP THREADPRIVATE(du_gwd_rando, du_gwd_front)
[1938]539      ! tendencies on wind due to gravity waves
540
[3435]541      LOGICAL,SAVE :: is_initialized=.FALSE.
542!$OMP THREADPRIVATE(is_initialized)   
543
[3815]544      ! Ocean-atmosphere interface:
[909]545
[3815]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     
[4370]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.
[3815]566
[4370]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
[3815]576    CONTAINS
577
[909]578!======================================================================
[1279]579SUBROUTINE phys_state_var_init(read_climoz)
[1785]580USE dimphy
581USE aero_mod
[2320]582USE infotrac_phy, ONLY : nbtr
[4088]583#ifdef ISO
[4143]584USE infotrac_phy, ONLY : ntraciso=>ntiso,niso
[4088]585#endif
[5282]586USE clesphys_mod_h
[1785]587USE indice_sol_mod
[3815]588use config_ocean_skin_m, only: activate_ocean_skin
[4370]589use surface_data, only: type_ocean
[909]590IMPLICIT NONE
[1279]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
[3781]600
601      print*, 'is_initialized', is_initialized
[3435]602      IF (is_initialized) RETURN
603      is_initialized=.TRUE.
[952]604      ALLOCATE(pctsrf(klon,nbsrf))
605      ALLOCATE(ftsol(klon,nbsrf))
[3888]606      ALLOCATE(beta_aridity(klon,nbsrf))
[2243]607      ALLOCATE(qsol(klon),fevap(klon,nbsrf))
608      ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf))
[2952]609!FC
610      ALLOCATE(treedrg(klon,klev,nbsrf))
[5627]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
[952]633      ALLOCATE(falb1(klon,nbsrf))
634      ALLOCATE(falb2(klon,nbsrf))
[2227]635!albedo SB >>>
[3781]636      print*, 'allocate falb'
[2227]637      ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf))
[3956]638!!      print*, 'allocate falb good', falb_dir(1,1,1)
[2227]639      ALLOCATE(chl_con(klon))
640!albedo SB <<<
[952]641      ALLOCATE(rain_fall(klon))
642      ALLOCATE(snow_fall(klon))
[4523]643      ALLOCATE(bs_fall(klon))
[3756]644      ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon))
[3435]645      sollw=0.0
[952]646      ALLOCATE(radsol(klon))
[2366]647      ALLOCATE(swradcorr(klon))
[952]648      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
649      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
[909]650
[952]651      ALLOCATE(rugoro(klon))
652      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
[4523]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))
[1054]655      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
[5204]656      ALLOCATE(cf_ancien(klon,klev), rvc_ancien(klon,klev))
[1742]657!!! Rom P >>>
658      ALLOCATE(tr_ancien(klon,klev,nbtr))
659!!! Rom P <<<
[952]660      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
[4613]661      ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev),detrain_cv(klon,klev),fm_cv(klon,klev))
[952]662      ALLOCATE(ratqs(klon,klev))
[1761]663      ALLOCATE(pbl_tke(klon,klev+1,nbsrf+1))
[2159]664!nrlmd<
665      ALLOCATE(delta_tsurf(klon,nbsrf))
666!>nrlmd
[1761]667      ALLOCATE(coefh(klon,klev+1,nbsrf+1))
668      ALLOCATE(coefm(klon,klev+1,nbsrf+1))
[4296]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
[927]673      ALLOCATE(zmax0(klon), f0(klon))
[1827]674      ALLOCATE(sig1(klon,klev), w01(klon,klev))
[942]675      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
[952]676      ALLOCATE(detr_therm(klon,klev))
677!     pour phsystoke avec thermiques
678      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
679! radiation outputs
[3082]680      ALLOCATE(swdnc0(klon,klevp1), swdn0(klon,klevp1), swdn(klon,klevp1))
681      ALLOCATE(swupc0(klon,klevp1), swup0(klon,klevp1), swup(klon,klevp1))
[3106]682      ALLOCATE(lwdnc0(klon,klevp1), lwdn0(klon,klevp1), lwdn(klon,klevp1))
683      ALLOCATE(lwupc0(klon,klevp1), lwup0(klon,klevp1), lwup(klon,klevp1))
[952]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))
[1398]704      ALLOCATE(O3sumSTD(klon,nlevSTD,nout))
705      ALLOCATE(O3daysumSTD(klon,nlevSTD,nout))
[1352]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))
[1398]715      ALLOCATE(O3STD(klon,nlevSTD))
716      ALLOCATE(O3daySTD(klon,nlevSTD))
[1352]717!IM end
[952]718      ALLOCATE(seed_old(klon,napisccp))
719      ALLOCATE(zuthe(klon),zvthe(klon))
720      ALLOCATE(alb_neig(klon))
721!cloud base mass flux
[1398]722      ALLOCATE(ema_cbmf(klon))
[952]723!cloud base pressure & cloud top pressure
724      ALLOCATE(ema_pcb(klon), ema_pct(klon))
725!
[3496]726      ALLOCATE(Mipsh(klon,klev))
[5569]727      Mipsh(:,:)=0.0
[952]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))
[4613]733      ALLOCATE(ftd(klon,klev), fqd(klon,klev),fqcomp(klon,klev))
[952]734      ALLOCATE(Ale_bl(klon))
[3080]735      ALLOCATE(ale_wake(klon))
736      ALLOCATE(ale_bl_stat(klon))
[3439]737      ale_bl_stat(:)=0
[952]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))
[4744]742      ALLOCATE(wake_s(klon), awake_s(klon), wake_dens(klon), awake_dens(klon))
[3956]743!!      awake_dens = 0.  ! initialized in phyetat0
744      ALLOCATE(cv_gen(klon))
[2635]745      ALLOCATE(wake_Cstar(klon))
[1403]746      ALLOCATE(wake_pe(klon), wake_fip(klon))
[2159]747!jyg<
[2181]748      ALLOCATE(wake_delta_pbl_TKE(klon,klev+1,nbsrf+1))
[2159]749!>jyg
[952]750      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
751      ALLOCATE(pfrac_1nucl(klon,klev))
752      ALLOCATE(total_rain(klon), nday_rain(klon))
[4556]753      ALLOCATE(ndayrain_mth(klon))
[3435]754      ALLOCATE(paire_ter(klon))
[952]755      ALLOCATE(albsol1(klon), albsol2(klon))
[2227]756!albedo SB >>>
757      ALLOCATE(albsol_dir(klon,nsw),albsol_dif(klon,nsw))
758!albedo SB <<<
[1279]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     
[952]767      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
768      ALLOCATE(heat(klon,klev), heat0(klon,klev))
769      ALLOCATE(cool(klon,klev), cool0(klon,klev))
[3479]770      ALLOCATE(heat_volc(klon,klev), cool_volc(klon,klev))
[952]771      ALLOCATE(topsw(klon), toplw(klon))
772      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
[3435]773      sollwdown = 0.
[952]774      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
775      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
[3435]776      sollw0 = 0.
[952]777      ALLOCATE(albpla(klon))
[1539]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))
[3756]783      ALLOCATE(solswp(klon), solswfdiffp(klon), sollwp(klon))
[2240]784      ALLOCATE(gustiness(klon))
[1539]785      ALLOCATE(sollwdownp(klon))
786      ALLOCATE(topsw0p(klon),toplw0p(klon))
787      ALLOCATE(solsw0p(klon),sollw0p(klon))
[3106]788      ALLOCATE(lwdnc0p(klon,klevp1), lwdn0p(klon,klevp1), lwdnp(klon,klevp1))
789      ALLOCATE(lwupc0p(klon,klevp1), lwup0p(klon,klevp1), lwupp(klon,klevp1))
[3082]790      ALLOCATE(swdnc0p(klon,klevp1), swdn0p(klon,klevp1), swdnp(klon,klevp1))
791      ALLOCATE(swupc0p(klon,klevp1), swup0p(klon,klevp1), swupp(klon,klevp1))
[1539]792
[4677]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))
[4773]799      ALLOCATE(sollwdown_s2(klon),sollwdownclr_s2(klon))
[4677]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
[952]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))
[1813]814      ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf),wstar(klon,nbsrf+1))
[952]815      ALLOCATE(topswad(klon), solswad(klon))
816      ALLOCATE(topswai(klon), solswai(klon))
[1279]817      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
[2146]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))
[1279]822      ALLOCATE(ccm(klon,klev,nbands))
[4088]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))
[4984]831      ALLOCATE(xtbs_ancien(ntraciso,klon,klev))
[4088]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
[1638]842      ALLOCATE(ale_bl_trig(klon))
[5208]843      ALLOCATE(ratqs_inter_(klon,klev),sigma_qtherm(klon,klev))
[3435]844      IF (ok_gwd_rando) THEN
[3756]845        ALLOCATE(du_gwd_rando(klon, klev))
[3435]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
[909]852
[4370]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
[3815]860    END SUBROUTINE phys_state_var_init
861
[909]862!======================================================================
[3815]863    SUBROUTINE phys_state_var_end
864      ! Useful only for lmdz1d.
[5282]865      USE clesphys_mod_h
[1785]866USE indice_sol_mod
[3815]867use config_ocean_skin_m, only: activate_ocean_skin
[4370]868use surface_data, only: type_ocean
[909]869IMPLICIT NONE
870
[3756]871      DEALLOCATE(pctsrf, ftsol, falb1, falb2)
[3888]872      DEALLOCATE(beta_aridity)
[3756]873      DEALLOCATE(qsol,fevap,z0m,z0h,agesno)
[2952]874!FC
[3756]875      DEALLOCATE(treedrg)
[5627]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)
[4523]897      DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr)
[3756]898      DEALLOCATE(zmea, zstd, zsig, zgam)
899      DEALLOCATE(zthe, zpic, zval)
900      DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
[5204]901      DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien)
[4523]902      DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
[4613]903      DEALLOCATE(qtc_cv,sigt_cv,detrain_cv,fm_cv)
[3756]904      DEALLOCATE(u_ancien, v_ancien)
[5204]905      DEALLOCATE(cf_ancien, rvc_ancien)
[3756]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)
[952]913! radiation outputs
[3756]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)
[952]923! pressure level
[3756]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)
[1352]940!IM beg
[3756]941      DEALLOCATE(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD)
942      DEALLOCATE(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD)
[1352]943!IM end
[3756]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)
[4613]952      DEALLOCATE(ftd, fqd, fqcomp)
[3756]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)
[4744]958      DEALLOCATE(wake_s, awake_s, wake_dens, awake_dens)
[3956]959      DEALLOCATE(cv_gen)
[3756]960      DEALLOCATE(wake_Cstar, wake_pe, wake_fip)
[2159]961!jyg<
[3756]962      DEALLOCATE(wake_delta_pbl_TKE)
[3888]963!nrlmd<
964      DEALLOCATE(delta_tsurf)
965!>nrlmd
[2159]966!>jyg
[3756]967      DEALLOCATE(pfrac_impa, pfrac_nucl)
968      DEALLOCATE(pfrac_1nucl)
969      DEALLOCATE(total_rain, nday_rain)
[4556]970      DEALLOCATE(ndayrain_mth)
[3756]971      DEALLOCATE(paire_ter)
972      DEALLOCATE(albsol1, albsol2)
[2227]973!albedo SB >>>
[3756]974      DEALLOCATE(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con)
[2227]975!albedo SB <<<
[3756]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)
[4677]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)
[4773]994      DEALLOCATE(sollwdown_s2, sollwdownclr_s2)
[4677]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
[1539]1002!IM ajout variables CFMIP2/CMIP5
[3756]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)
[5208]1032      DEALLOCATE(ratqs_inter_,sigma_qtherm)
[3815]1033
[4370]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
[3815]1039
[4088]1040#ifdef ISO   
1041      DEALLOCATE(xtsol,fxtevap) 
[4984]1042      DEALLOCATE(xt_ancien,xtl_ancien,xts_ancien,xtbs_ancien, fxtd, wake_deltaxt)
[4088]1043      DEALLOCATE(xtrain_fall, xtsnow_fall, xtrain_con, xtsnow_con)
1044#ifdef ISOTRAC
1045      DEALLOCATE(bassin_map,boite_map)
1046#endif       
1047#endif
[3435]1048      is_initialized=.FALSE.
[3815]1049     
[909]1050END SUBROUTINE phys_state_var_end
1051
1052      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.