! ! $Id: phys_state_var_mod.F90 3888 2021-05-05 10:50:37Z musat $ ! MODULE phys_state_var_mod ! Variables sauvegardees pour le startphy.nc !====================================================================== ! ! !====================================================================== ! Declaration des variables USE dimphy USE netcdf, only: nf90_fill_real INTEGER, PARAMETER :: nlevSTD=17 INTEGER, PARAMETER :: nlevSTD8=8 INTEGER, PARAMETER :: nlevSTD3=3 INTEGER, PARAMETER :: nout=3 INTEGER, PARAMETER :: napisccp=1 INTEGER, SAVE :: radpas ! radiation is called every "radpas" step INTEGER, SAVE :: cvpas ! convection is called every "cvpas" step INTEGER, SAVE :: cvpas_0 = 1 ! reference value for cvpas INTEGER, SAVE :: wkpas ! wake scheme is called every "wkpas" step REAL, PARAMETER :: missing_val_nf90=nf90_fill_real !$OMP THREADPRIVATE(radpas) !$OMP THREADPRIVATE(cvpas) !$OMP THREADPRIVATE(cvpas_0) !$OMP THREADPRIVATE(wkpas) REAL, SAVE :: phys_tstep=0, solaire_etat0 !$OMP THREADPRIVATE(phys_tstep, solaire_etat0) REAL, ALLOCATABLE, SAVE :: pctsrf(:,:) !$OMP THREADPRIVATE(pctsrf) REAL, ALLOCATABLE, SAVE :: ftsol(:,:) !$OMP THREADPRIVATE(ftsol) REAL, ALLOCATABLE, SAVE :: beta_aridity(:,:) !$OMP THREADPRIVATE(beta_aridity) REAL,ALLOCATABLE,SAVE :: qsol(:),fevap(:,:),z0m(:,:),z0h(:,:),agesno(:,:) !$OMP THREADPRIVATE(qsol,fevap,z0m,z0h,agesno) !FC drag des arbres REAL, ALLOCATABLE, SAVE :: treedrg(:,:,:) !$OMP THREADPRIVATE(treedrg) ! character(len=6), SAVE :: ocean !!!!!!$OMP THREADPRIVATE(ocean) ! logical, SAVE :: ok_veget !!!!!!$OMP THREADPRIVATE(ok_veget) REAL, ALLOCATABLE, SAVE :: falb1(:,:), falb2(:,:) !$OMP THREADPRIVATE(falb1, falb2) !albedo SB >>> REAL, ALLOCATABLE, SAVE :: falb_dif(:,:,:), falb_dir(:,:,:) REAL, ALLOCATABLE, SAVE :: chl_con(:) !$OMP THREADPRIVATE(falb_dir,falb_dif,chl_con) !albedo SB <<< REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:) !$OMP THREADPRIVATE( rain_fall, snow_fall) REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:) !$OMP THREADPRIVATE(solsw, solswfdiff, sollw) REAL, ALLOCATABLE, SAVE :: radsol(:) !$OMP THREADPRIVATE(radsol) REAL, ALLOCATABLE, SAVE :: swradcorr(:) !$OMP THREADPRIVATE(swradcorr) !clesphy0 param physiq ! ! Parametres de l'Orographie a l'Echelle Sous-Maille (OESM): ! REAL, ALLOCATABLE, SAVE :: zmea(:), zstd(:), zsig(:), zgam(:) !$OMP THREADPRIVATE(zmea, zstd, zsig, zgam) REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:) !$OMP THREADPRIVATE(zthe, zpic, zval) ! REAL tabcntr0(100) REAL, ALLOCATABLE, SAVE :: rugoro(:) !$OMP THREADPRIVATE(rugoro) REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:) !$OMP THREADPRIVATE(t_ancien, q_ancien) REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:) !$OMP THREADPRIVATE(ql_ancien, qs_ancien) REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:) !$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien) REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:) !$OMP THREADPRIVATE(u_ancien, v_ancien) !!! RomP >>> REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:) !$OMP THREADPRIVATE(tr_ancien) !!! RomP <<< LOGICAL, SAVE :: ancien_ok !$OMP THREADPRIVATE(ancien_ok) REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:) !$OMP THREADPRIVATE(clwcon,rnebcon) REAL, ALLOCATABLE, SAVE :: qtc_cv(:,:),sigt_cv(:,:) !$OMP THREADPRIVATE(qtc_cv,sigt_cv) REAL, ALLOCATABLE, SAVE :: ratqs(:,:) !$OMP THREADPRIVATE(ratqs) REAL, ALLOCATABLE, SAVE :: pbl_tke(:,:,:) ! turb kinetic energy REAL, ALLOCATABLE, SAVE :: coefh(:,:,:) ! Kz enthalpie REAL, ALLOCATABLE, SAVE :: coefm(:,:,:) ! Kz momentum !$OMP THREADPRIVATE(pbl_tke, coefh,coefm) REAL, ALLOCATABLE, SAVE :: zmax0(:), f0(:) ! !$OMP THREADPRIVATE(zmax0,f0) REAL, ALLOCATABLE, SAVE :: sig1(:,:), w01(:,:) !$OMP THREADPRIVATE(sig1,w01) REAL, ALLOCATABLE, SAVE :: entr_therm(:,:), fm_therm(:,:) !$OMP THREADPRIVATE(entr_therm,fm_therm) REAL, ALLOCATABLE, SAVE :: detr_therm(:,:) !$OMP THREADPRIVATE(detr_therm) !IM 150408 ! pour phsystoke avec thermiques REAL,ALLOCATABLE,SAVE :: clwcon0th(:,:),rnebcon0th(:,:) !$OMP THREADPRIVATE(clwcon0th,rnebcon0th) ! radiation outputs REAL,ALLOCATABLE,SAVE :: swdnc0(:,:), swdn0(:,:), swdn(:,:) !$OMP THREADPRIVATE(swdnc0,swdn0,swdn) REAL,ALLOCATABLE,SAVE :: swupc0(:,:), swup0(:,:), swup(:,:) !$OMP THREADPRIVATE(swupc0, swup0,swup) REAL,ALLOCATABLE,SAVE :: SWdn200clr(:), SWdn200(:) !$OMP THREADPRIVATE(SWdn200clr,SWdn200) REAL,ALLOCATABLE,SAVE :: SWup200clr(:), SWup200(:) !$OMP THREADPRIVATE(SWup200clr,SWup200) REAL,ALLOCATABLE,SAVE :: lwdnc0(:,:), lwdn0(:,:), lwdn(:,:) !$OMP THREADPRIVATE(lwdnc0,lwdn0,lwdn) REAL,ALLOCATABLE,SAVE :: lwupc0(:,:), lwup0(:,:), lwup(:,:) !$OMP THREADPRIVATE(lwupc0,lwup0,lwup) REAL,ALLOCATABLE,SAVE :: LWdn200clr(:), LWdn200(:) !$OMP THREADPRIVATE(LWdn200clr,LWdn200) REAL,ALLOCATABLE,SAVE :: LWup200clr(:), LWup200(:) !$OMP THREADPRIVATE(LWup200clr,LWup200) REAL,ALLOCATABLE,SAVE :: LWdnTOA(:), LWdnTOAclr(:) !$OMP THREADPRIVATE(LWdnTOA,LWdnTOAclr) ! pressure level REAL,ALLOCATABLE,SAVE :: tsumSTD(:,:,:) !$OMP THREADPRIVATE(tsumSTD) REAL,ALLOCATABLE,SAVE :: usumSTD(:,:,:), vsumSTD(:,:,:) !$OMP THREADPRIVATE(usumSTD,vsumSTD) REAL,ALLOCATABLE,SAVE :: wsumSTD(:,:,:), phisumSTD(:,:,:) !$OMP THREADPRIVATE(wsumSTD,phisumSTD) REAL,ALLOCATABLE,SAVE :: qsumSTD(:,:,:), rhsumSTD(:,:,:) !$OMP THREADPRIVATE(qsumSTD,rhsumSTD) REAL,ALLOCATABLE,SAVE :: tnondef(:,:,:) !$OMP THREADPRIVATE(tnondef) REAL,ALLOCATABLE,SAVE :: uvsumSTD(:,:,:) !$OMP THREADPRIVATE(uvsumSTD) REAL,ALLOCATABLE,SAVE :: vqsumSTD(:,:,:) !$OMP THREADPRIVATE(vqsumSTD) REAL,ALLOCATABLE,SAVE :: vTsumSTD(:,:,:) !$OMP THREADPRIVATE(vTsumSTD) REAL,ALLOCATABLE,SAVE :: wqsumSTD(:,:,:) !$OMP THREADPRIVATE(wqsumSTD) REAL,ALLOCATABLE,SAVE :: vphisumSTD(:,:,:) !$OMP THREADPRIVATE(vphisumSTD) REAL,ALLOCATABLE,SAVE :: wTsumSTD(:,:,:) !$OMP THREADPRIVATE(wTsumSTD) REAL,ALLOCATABLE,SAVE :: u2sumSTD(:,:,:) !$OMP THREADPRIVATE(u2sumSTD) REAL,ALLOCATABLE,SAVE :: v2sumSTD(:,:,:) !$OMP THREADPRIVATE(v2sumSTD) REAL,ALLOCATABLE,SAVE :: T2sumSTD(:,:,:) !$OMP THREADPRIVATE(T2sumSTD) REAL,ALLOCATABLE,SAVE :: O3sumSTD(:,:,:), O3daysumSTD(:,:,:) !$OMP THREADPRIVATE(O3sumSTD,O3daysumSTD) !IM begin REAL,ALLOCATABLE,SAVE :: wlevSTD(:,:), ulevSTD(:,:), vlevSTD(:,:) !$OMP THREADPRIVATE(wlevSTD,ulevSTD,vlevSTD) REAL,ALLOCATABLE,SAVE :: tlevSTD(:,:), qlevSTD(:,:), rhlevSTD(:,:) !$OMP THREADPRIVATE(tlevSTD,qlevSTD,rhlevSTD) REAL,ALLOCATABLE,SAVE :: philevSTD(:,:) !$OMP THREADPRIVATE(philevSTD) REAL,ALLOCATABLE,SAVE :: uvSTD(:,:) !$OMP THREADPRIVATE(uvSTD) REAL,ALLOCATABLE,SAVE :: vqSTD(:,:) !$OMP THREADPRIVATE(vqSTD) REAL,ALLOCATABLE,SAVE :: vTSTD(:,:) !$OMP THREADPRIVATE(vTSTD) REAL,ALLOCATABLE,SAVE :: wqSTD(:,:) !$OMP THREADPRIVATE(wqSTD) REAL,ALLOCATABLE,SAVE :: vphiSTD(:,:) !$OMP THREADPRIVATE(vphiSTD) REAL,ALLOCATABLE,SAVE :: wTSTD(:,:) !$OMP THREADPRIVATE(wTSTD) REAL,ALLOCATABLE,SAVE :: u2STD(:,:) !$OMP THREADPRIVATE(u2STD) REAL,ALLOCATABLE,SAVE :: v2STD(:,:) !$OMP THREADPRIVATE(v2STD) REAL,ALLOCATABLE,SAVE :: T2STD(:,:) !$OMP THREADPRIVATE(T2STD) REAL,ALLOCATABLE,SAVE :: O3STD(:,:), O3daySTD(:,:) !$OMP THREADPRIVATE(O3STD,O3daySTD) !IM end INTEGER,ALLOCATABLE,SAVE :: seed_old(:,:) !$OMP THREADPRIVATE(seed_old) REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:) !$OMP THREADPRIVATE(zuthe,zvthe) REAL,ALLOCATABLE,SAVE :: alb_neig(:) !$OMP THREADPRIVATE(alb_neig) !cloud base mass flux REAL,ALLOCATABLE,SAVE :: ema_cbmf(:) !$OMP THREADPRIVATE(ema_cbmf) !cloud base pressure & cloud top pressure REAL,ALLOCATABLE,SAVE :: ema_pcb(:), ema_pct(:) !$OMP THREADPRIVATE(ema_pcb,ema_pct) REAL,ALLOCATABLE,SAVE :: Mipsh(:,:) ! mass flux shed from adiab. ascents !$OMP THREADPRIVATE(Mipsh) REAL,ALLOCATABLE,SAVE :: Ma(:,:) ! undilute upward mass flux !$OMP THREADPRIVATE(Ma) REAL,ALLOCATABLE,SAVE :: qcondc(:,:) ! in-cld water content from convect !$OMP THREADPRIVATE(qcondc) REAL,ALLOCATABLE,SAVE :: wd(:) ! sb !$OMP THREADPRIVATE(wd) REAL,ALLOCATABLE,SAVE :: sigd(:) !$OMP THREADPRIVATE(sigd) ! REAL,ALLOCATABLE,SAVE :: cin(:) !$OMP THREADPRIVATE(cin) ! ftd : convective heating due to unsaturated downdraughts REAL,ALLOCATABLE,SAVE :: ftd(:,:) !$OMP THREADPRIVATE(ftd) ! fqd : convective moistening due to unsaturated downdraughts REAL,ALLOCATABLE,SAVE :: fqd(:,:) !$OMP THREADPRIVATE(fqd) !34EK ! -- Variables de controle de ALE et ALP !ALE : Energie disponible pour soulevement : utilisee par la ! convection d'Emanuel pour le declenchement et la regulation REAL,ALLOCATABLE,SAVE :: ALE(:) !$OMP THREADPRIVATE(ALE) !ALP : Puissance disponible pour soulevement REAL,ALLOCATABLE,SAVE :: ALP(:) !$OMP THREADPRIVATE(ALP) ! ! nouvelles variables pour le couplage convection-couche limite REAL,ALLOCATABLE,SAVE :: Ale_bl(:) !$OMP THREADPRIVATE(Ale_bl) REAL,ALLOCATABLE,SAVE :: Alp_bl(:) !$OMP THREADPRIVATE(Alp_bl) INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:) !$OMP THREADPRIVATE(lalim_conv) REAL,ALLOCATABLE,SAVE :: wght_th(:,:) !$OMP THREADPRIVATE(wght_th) REAL,ALLOCATABLE,SAVE :: ale_wake(:) !$OMP THREADPRIVATE(ale_wake) REAL,ALLOCATABLE,SAVE :: ale_bl_stat(:) !$OMP THREADPRIVATE(ale_bl_stat) ! ! variables de la wake ! wake_deltat : ecart de temperature avec la zone non perturbee ! wake_deltaq : ecart d'humidite avec la zone non perturbee ! wake_s : fraction surfacique occupee par la poche froide ! awake_dens : number of active wakes per unit area ! wake_dens : number of wakes per unit area ! wake_occ : occurence of wakes (= 1 if wakes occur, =0 otherwise) ! wake_Cstar : vitesse d'etalement de la poche ! wake_pe : wake potential energy - WAPE ! wake_fip : Gust Front Impinging power - ALP REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:) !$OMP THREADPRIVATE(wake_deltat) REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:) !$OMP THREADPRIVATE(wake_deltaq) REAL,ALLOCATABLE,SAVE :: wake_s(:) !$OMP THREADPRIVATE(wake_s) REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:) !$OMP THREADPRIVATE(awake_dens, wake_dens) REAL,ALLOCATABLE,SAVE :: wake_Cstar(:) !$OMP THREADPRIVATE(wake_Cstar) REAL,ALLOCATABLE,SAVE :: wake_pe(:) !$OMP THREADPRIVATE(wake_pe) REAL,ALLOCATABLE,SAVE :: wake_fip(:) !$OMP THREADPRIVATE(wake_fip) ! !jyg< ! variables related to the spitting of the PBL between wake and ! off-wake regions. ! wake_delta_pbl_TKE : difference TKE_w - TKE_x REAL,ALLOCATABLE,SAVE :: wake_delta_pbl_TKE(:,:,:) !$OMP THREADPRIVATE(wake_delta_pbl_TKE) !nrlmd< REAL, ALLOCATABLE, SAVE :: delta_tsurf(:,:) ! Surface temperature difference inside-outside cold pool !$OMP THREADPRIVATE(delta_tsurf) !>nrlmd !>jyg ! ! pfrac_impa : Produits des coefs lessivage impaction ! pfrac_nucl : Produits des coefs lessivage nucleation ! pfrac_1nucl: Produits des coefs lessi nucl (alpha = 1) REAL,ALLOCATABLE,SAVE :: pfrac_impa(:,:), pfrac_nucl(:,:) !$OMP THREADPRIVATE(pfrac_impa,pfrac_nucl) REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:) !$OMP THREADPRIVATE(pfrac_1nucl) ! REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) !$OMP THREADPRIVATE(total_rain,nday_rain) REAL,ALLOCATABLE,SAVE :: paire_ter(:) !$OMP THREADPRIVATE(paire_ter) ! albsol1: albedo du sol total pour SW visible ! albsol2: albedo du sol total pour SW proche IR REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:) !$OMP THREADPRIVATE(albsol1,albsol2) !albedo SB >>> REAL,ALLOCATABLE,SAVE :: albsol_dif(:,:),albsol_dir(:,:) !$OMP THREADPRIVATE(albsol_dif,albsol_dir) !albedo SB <<< REAL, ALLOCATABLE, SAVE:: wo(:, :, :) ! column-density of ozone in a layer, in kilo-Dobsons ! Third dimension has size 1 or 2. ! "wo(:, :, 1)" is for the average day-night field, ! "wo(:, :, 2)" is for daylight time. !$OMP THREADPRIVATE(wo) ! heat : chauffage solaire ! heat0: chauffage solaire ciel clair ! cool : refroidissement infrarouge ! cool0 : refroidissement infrarouge ciel clair ! sollwdown : downward LW flux at surface ! sollwdownclr : downward CS LW flux at surface ! toplwdown : downward CS LW flux at TOA ! toplwdownclr : downward CS LW flux at TOA ! heat_volc : chauffage solaire du au volcanisme ! cool_volc : refroidissement infrarouge du au volcanisme REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:) !$OMP THREADPRIVATE(clwcon0,rnebcon0) REAL,ALLOCATABLE,SAVE :: heat(:,:) !$OMP THREADPRIVATE(heat) REAL,ALLOCATABLE,SAVE :: heat0(:,:) !$OMP THREADPRIVATE(heat0) REAL,ALLOCATABLE,SAVE :: cool(:,:) !$OMP THREADPRIVATE(cool) REAL,ALLOCATABLE,SAVE :: cool0(:,:) !$OMP THREADPRIVATE(cool0) REAL,ALLOCATABLE,SAVE :: heat_volc(:,:) !$OMP THREADPRIVATE(heat_volc) REAL,ALLOCATABLE,SAVE :: cool_volc(:,:) !$OMP THREADPRIVATE(cool_volc) REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:) !$OMP THREADPRIVATE(topsw,toplw) REAL,ALLOCATABLE,SAVE :: sollwdown(:) !$OMP THREADPRIVATE(sollwdown) REAL,ALLOCATABLE,SAVE :: gustiness(:) !$OMP THREADPRIVATE(gustiness) REAL,ALLOCATABLE,SAVE :: sollwdownclr(:) !$OMP THREADPRIVATE(sollwdownclr) REAL,ALLOCATABLE,SAVE :: toplwdown(:) !$OMP THREADPRIVATE(toplwdown) REAL,ALLOCATABLE,SAVE :: toplwdownclr(:) !$OMP THREADPRIVATE(toplwdownclr) REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:) !$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0) REAL,ALLOCATABLE,SAVE :: albpla(:) !$OMP THREADPRIVATE(albpla) !IM ajout variables CFMIP2/CMIP5 REAL,ALLOCATABLE,SAVE :: heatp(:,:), coolp(:,:) !$OMP THREADPRIVATE(heatp, coolp) REAL,ALLOCATABLE,SAVE :: heat0p(:,:), cool0p(:,:) !$OMP THREADPRIVATE(heat0p, cool0p) REAL,ALLOCATABLE,SAVE :: radsolp(:), topswp(:), toplwp(:) !$OMP THREADPRIVATE(radsolp, topswp, toplwp) REAL,ALLOCATABLE,SAVE :: albplap(:) !$OMP THREADPRIVATE(albplap) REAL,ALLOCATABLE,SAVE :: solswp(:), solswfdiffp(:), sollwp(:) !$OMP THREADPRIVATE(solswp, solswfdiffp, sollwp) REAL,ALLOCATABLE,SAVE :: sollwdownp(:) !$OMP THREADPRIVATE(sollwdownp) REAL,ALLOCATABLE,SAVE :: topsw0p(:),toplw0p(:) REAL,ALLOCATABLE,SAVE :: solsw0p(:),sollw0p(:) !$OMP THREADPRIVATE(topsw0p,toplw0p,solsw0p,sollw0p) REAL,ALLOCATABLE,SAVE :: lwdnc0p(:,:), lwdn0p(:,:), lwdnp(:,:) REAL,ALLOCATABLE,SAVE :: lwupc0p(:,:), lwup0p(:,:), lwupp(:,:) !$OMP THREADPRIVATE(lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp) REAL,ALLOCATABLE,SAVE :: swdnc0p(:,:), swdn0p(:,:), swdnp(:,:) REAL,ALLOCATABLE,SAVE :: swupc0p(:,:), swup0p(:,:), swupp(:,:) !$OMP THREADPRIVATE(swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp) ! pbase : cloud base pressure ! bbase : cloud base buoyancy REAL,ALLOCATABLE,SAVE :: cape(:) !$OMP THREADPRIVATE(cape) REAL,ALLOCATABLE,SAVE :: pbase(:) !$OMP THREADPRIVATE(pbase) REAL,ALLOCATABLE,SAVE :: bbase(:) !$OMP THREADPRIVATE(bbase) ! REAL,SAVE,ALLOCATABLE :: zqasc(:,:) !$OMP THREADPRIVATE( zqasc) INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:) !$OMP THREADPRIVATE(ibas_con,itop_con) REAL,SAVE,ALLOCATABLE :: rain_con(:) !$OMP THREADPRIVATE(rain_con) REAL,SAVE,ALLOCATABLE :: snow_con(:) !$OMP THREADPRIVATE(snow_con) ! REAL,SAVE,ALLOCATABLE :: rlonPOS(:) !$OMP THREADPRIVATE(rlonPOS) REAL,SAVE,ALLOCATABLE :: newsst(:) !$OMP THREADPRIVATE(newsst) REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:),wstar(:,:) !$OMP THREADPRIVATE(ustar,u10m,v10m,wstar) ! ! ok_ade=T -ADE=topswad-topsw ! ok_aie=T -> ! ok_ade=T -AIE=topswai-topswad ! ok_ade=F -AIE=topswai-topsw ! !topswad, solswad : Aerosol direct effect REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:) !$OMP THREADPRIVATE(topswad,solswad) !topswai, solswai : Aerosol indirect effect REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:) !$OMP THREADPRIVATE(topswai,solswai) REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:) !$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero) REAL,SAVE,ALLOCATABLE :: tau_aero_sw_rrtm(:,:,:,:), piz_aero_sw_rrtm(:,:,:,:), cg_aero_sw_rrtm(:,:,:,:) !$OMP THREADPRIVATE(tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm) REAL,SAVE,ALLOCATABLE :: tau_aero_lw_rrtm(:,:,:,:), piz_aero_lw_rrtm(:,:,:,:), cg_aero_lw_rrtm(:,:,:,:) !$OMP THREADPRIVATE(tau_aero_lw_rrtm, piz_aero_lw_rrtm, cg_aero_lw_rrtm) REAL,SAVE,ALLOCATABLE :: ccm(:,:,:) !$OMP THREADPRIVATE(ccm) REAL,SAVE,ALLOCATABLE :: ale_bl_trig(:) !$OMP THREADPRIVATE(ale_bl_trig) REAL,SAVE,ALLOCATABLE :: ratqs_inter(:,:) !$OMP THREADPRIVATE(ratqs_inter) REAL, ALLOCATABLE, SAVE:: du_gwd_rando(:, :), du_gwd_front(:, :) !$OMP THREADPRIVATE(du_gwd_rando, du_gwd_front) ! tendencies on wind due to gravity waves LOGICAL,SAVE :: is_initialized=.FALSE. !$OMP THREADPRIVATE(is_initialized) ! Ocean-atmosphere interface: REAL, ALLOCATABLE, SAVE:: ds_ns(:) ! (klon) ! "delta salinity near surface". Salinity variation in the ! near-surface turbulent layer. That is subskin salinity minus ! foundation salinity. In ppt. REAL, ALLOCATABLE, SAVE:: dt_ns(:) ! (klon) ! "delta temperature near surface". Temperature variation in the ! near-surface turbulent layer. That is subskin temperature ! minus foundation temperature. (Can be negative.) In K. REAL, ALLOCATABLE, SAVE:: delta_sst(:) ! (klon) ! Ocean-air interface temperature minus bulk SST, in ! K. Allocated and defined only if activate_ocean_skin >= 1. REAL, ALLOCATABLE, SAVE:: delta_sal(:) ! (klon) ! Ocean-air interface salinity minus bulk salinity, in ppt !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst) CONTAINS !====================================================================== SUBROUTINE phys_state_var_init(read_climoz) USE dimphy USE aero_mod USE infotrac_phy, ONLY : nbtr USE indice_sol_mod use config_ocean_skin_m, only: activate_ocean_skin IMPLICIT NONE integer, intent(in):: read_climoz ! read ozone climatology ! Allowed values are 0, 1 and 2 ! 0: do not read an ozone climatology ! 1: read a single ozone climatology that will be used day and night ! 2: read two ozone climatologies, the average day and night ! climatology and the daylight climatology include "clesphys.h" print*, 'is_initialized', is_initialized IF (is_initialized) RETURN is_initialized=.TRUE. ALLOCATE(pctsrf(klon,nbsrf)) ALLOCATE(ftsol(klon,nbsrf)) ALLOCATE(beta_aridity(klon,nbsrf)) ALLOCATE(qsol(klon),fevap(klon,nbsrf)) ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf)) !FC ALLOCATE(treedrg(klon,klev,nbsrf)) ALLOCATE(falb1(klon,nbsrf)) ALLOCATE(falb2(klon,nbsrf)) !albedo SB >>> print*, 'allocate falb' ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf)) print*, 'allocate falb good', falb_dir(1,1,1) ALLOCATE(chl_con(klon)) !albedo SB <<< ALLOCATE(rain_fall(klon)) ALLOCATE(snow_fall(klon)) ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon)) sollw=0.0 ALLOCATE(radsol(klon)) ALLOCATE(swradcorr(klon)) ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon)) ALLOCATE(zthe(klon), zpic(klon), zval(klon)) ALLOCATE(rugoro(klon)) ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev)) ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev)) ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon)) ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev)) !!! Rom P >>> ALLOCATE(tr_ancien(klon,klev,nbtr)) !!! Rom P <<< ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev)) ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev)) ALLOCATE(ratqs(klon,klev)) ALLOCATE(pbl_tke(klon,klev+1,nbsrf+1)) !nrlmd< ALLOCATE(delta_tsurf(klon,nbsrf)) !>nrlmd ALLOCATE(coefh(klon,klev+1,nbsrf+1)) ALLOCATE(coefm(klon,klev+1,nbsrf+1)) ALLOCATE(zmax0(klon), f0(klon)) ALLOCATE(sig1(klon,klev), w01(klon,klev)) ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1)) ALLOCATE(detr_therm(klon,klev)) ! pour phsystoke avec thermiques ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev)) ! radiation outputs ALLOCATE(swdnc0(klon,klevp1), swdn0(klon,klevp1), swdn(klon,klevp1)) ALLOCATE(swupc0(klon,klevp1), swup0(klon,klevp1), swup(klon,klevp1)) ALLOCATE(lwdnc0(klon,klevp1), lwdn0(klon,klevp1), lwdn(klon,klevp1)) ALLOCATE(lwupc0(klon,klevp1), lwup0(klon,klevp1), lwup(klon,klevp1)) ALLOCATE(SWdn200clr(klon), SWdn200(klon)) ALLOCATE(SWup200clr(klon), SWup200(klon)) ALLOCATE(LWdn200clr(klon), LWdn200(klon)) ALLOCATE(LWup200clr(klon), LWup200(klon)) ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon)) ! pressure level ALLOCATE(tsumSTD(klon,nlevSTD,nout)) ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout)) ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout)) ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout)) ALLOCATE(tnondef(klon,nlevSTD,nout)) ALLOCATE(uvsumSTD(klon,nlevSTD,nout)) ALLOCATE(vqsumSTD(klon,nlevSTD,nout)) ALLOCATE(vTsumSTD(klon,nlevSTD,nout)) ALLOCATE(wqsumSTD(klon,nlevSTD,nout)) ALLOCATE(vphisumSTD(klon,nlevSTD,nout)) ALLOCATE(wTsumSTD(klon,nlevSTD,nout)) ALLOCATE(u2sumSTD(klon,nlevSTD,nout)) ALLOCATE(v2sumSTD(klon,nlevSTD,nout)) ALLOCATE(T2sumSTD(klon,nlevSTD,nout)) ALLOCATE(O3sumSTD(klon,nlevSTD,nout)) ALLOCATE(O3daysumSTD(klon,nlevSTD,nout)) !IM beg ALLOCATE(wlevSTD(klon,nlevSTD), ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD)) ALLOCATE(tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD), rhlevSTD(klon,nlevSTD)) ALLOCATE(philevSTD(klon,nlevSTD)) ALLOCATE(uvSTD(klon,nlevSTD),vqSTD(klon,nlevSTD)) ALLOCATE(vTSTD(klon,nlevSTD),wqSTD(klon,nlevSTD)) ALLOCATE(vphiSTD(klon,nlevSTD),wTSTD(klon,nlevSTD)) ALLOCATE(u2STD(klon,nlevSTD),v2STD(klon,nlevSTD)) ALLOCATE(T2STD(klon,nlevSTD)) ALLOCATE(O3STD(klon,nlevSTD)) ALLOCATE(O3daySTD(klon,nlevSTD)) !IM end ALLOCATE(seed_old(klon,napisccp)) ALLOCATE(zuthe(klon),zvthe(klon)) ALLOCATE(alb_neig(klon)) !cloud base mass flux ALLOCATE(ema_cbmf(klon)) !cloud base pressure & cloud top pressure ALLOCATE(ema_pcb(klon), ema_pct(klon)) ! ALLOCATE(Mipsh(klon,klev)) ALLOCATE(Ma(klon,klev)) ALLOCATE(qcondc(klon,klev)) ALLOCATE(wd(klon)) ALLOCATE(sigd(klon)) ALLOCATE(cin(klon), ALE(klon), ALP(klon)) ALLOCATE(ftd(klon,klev), fqd(klon,klev)) ALLOCATE(Ale_bl(klon)) ALLOCATE(ale_wake(klon)) ALLOCATE(ale_bl_stat(klon)) ale_bl_stat(:)=0 ALLOCATE(Alp_bl(klon)) ALLOCATE(lalim_conv(klon)) ALLOCATE(wght_th(klon,klev)) ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev)) ALLOCATE(wake_s(klon), awake_dens(klon), wake_dens(klon)) awake_dens = 0. ALLOCATE(wake_Cstar(klon)) ALLOCATE(wake_pe(klon), wake_fip(klon)) !jyg< ALLOCATE(wake_delta_pbl_TKE(klon,klev+1,nbsrf+1)) !>jyg ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev)) ALLOCATE(pfrac_1nucl(klon,klev)) ALLOCATE(total_rain(klon), nday_rain(klon)) ALLOCATE(paire_ter(klon)) ALLOCATE(albsol1(klon), albsol2(klon)) !albedo SB >>> ALLOCATE(albsol_dir(klon,nsw),albsol_dif(klon,nsw)) !albedo SB <<< if (read_climoz <= 1) then ALLOCATE(wo(klon,klev, 1)) else ! read_climoz == 2 ALLOCATE(wo(klon,klev, 2)) end if ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev)) ALLOCATE(heat(klon,klev), heat0(klon,klev)) ALLOCATE(cool(klon,klev), cool0(klon,klev)) ALLOCATE(heat_volc(klon,klev), cool_volc(klon,klev)) ALLOCATE(topsw(klon), toplw(klon)) ALLOCATE(sollwdown(klon), sollwdownclr(klon)) sollwdown = 0. ALLOCATE(toplwdown(klon), toplwdownclr(klon)) ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon)) sollw0 = 0. ALLOCATE(albpla(klon)) !IM ajout variables CFMIP2/CMIP5 ALLOCATE(heatp(klon,klev), coolp(klon,klev)) ALLOCATE(heat0p(klon,klev), cool0p(klon,klev)) ALLOCATE(radsolp(klon), topswp(klon), toplwp(klon)) ALLOCATE(albplap(klon)) ALLOCATE(solswp(klon), solswfdiffp(klon), sollwp(klon)) ALLOCATE(gustiness(klon)) ALLOCATE(sollwdownp(klon)) ALLOCATE(topsw0p(klon),toplw0p(klon)) ALLOCATE(solsw0p(klon),sollw0p(klon)) ALLOCATE(lwdnc0p(klon,klevp1), lwdn0p(klon,klevp1), lwdnp(klon,klevp1)) ALLOCATE(lwupc0p(klon,klevp1), lwup0p(klon,klevp1), lwupp(klon,klevp1)) ALLOCATE(swdnc0p(klon,klevp1), swdn0p(klon,klevp1), swdnp(klon,klevp1)) ALLOCATE(swupc0p(klon,klevp1), swup0p(klon,klevp1), swupp(klon,klevp1)) ALLOCATE(cape(klon)) ALLOCATE(pbase(klon),bbase(klon)) ALLOCATE(zqasc(klon,klev)) ALLOCATE(ibas_con(klon), itop_con(klon)) ALLOCATE(rain_con(klon), snow_con(klon)) ALLOCATE(rlonPOS(klon)) ALLOCATE(newsst(klon)) ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf),wstar(klon,nbsrf+1)) ALLOCATE(topswad(klon), solswad(klon)) ALLOCATE(topswai(klon), solswai(klon)) ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands)) ALLOCATE(tau_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm),piz_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm)) ALLOCATE(cg_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm)) ALLOCATE(tau_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm),piz_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm)) ALLOCATE(cg_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm)) ALLOCATE(ccm(klon,klev,nbands)) ALLOCATE(ale_bl_trig(klon)) ALLOCATE(ratqs_inter(klon,klev)) IF (ok_gwd_rando) THEN ALLOCATE(du_gwd_rando(klon, klev)) du_gwd_rando(:,:)=0. ENDIF IF (.not. ok_hines .and. ok_gwd_rando) THEN ALLOCATE(du_gwd_front(klon, klev)) du_gwd_front(:,:) = 0 !ym missing init ENDIF if (activate_ocean_skin >= 1) ALLOCATE(delta_sal(klon), ds_ns(klon), & dt_ns(klon), delta_sst(klon)) END SUBROUTINE phys_state_var_init !====================================================================== SUBROUTINE phys_state_var_end ! Useful only for lmdz1d. !USE dimphy USE indice_sol_mod use config_ocean_skin_m, only: activate_ocean_skin IMPLICIT NONE include "clesphys.h" DEALLOCATE(pctsrf, ftsol, falb1, falb2) DEALLOCATE(beta_aridity) DEALLOCATE(qsol,fevap,z0m,z0h,agesno) !FC DEALLOCATE(treedrg) DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr) DEALLOCATE(zmea, zstd, zsig, zgam) DEALLOCATE(zthe, zpic, zval) DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon) DEALLOCATE(qs_ancien, ql_ancien) DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien) DEALLOCATE(qtc_cv,sigt_cv) DEALLOCATE(u_ancien, v_ancien) DEALLOCATE(tr_ancien) !RomP DEALLOCATE(ratqs, pbl_tke,coefh,coefm) DEALLOCATE(zmax0, f0) DEALLOCATE(sig1, w01) DEALLOCATE(entr_therm, fm_therm) DEALLOCATE(detr_therm) DEALLOCATE(clwcon0th, rnebcon0th) ! radiation outputs DEALLOCATE(swdnc0, swdn0, swdn) DEALLOCATE(swupc0, swup0, swup) DEALLOCATE(lwdnc0, lwdn0, lwdn) DEALLOCATE(lwupc0, lwup0, lwup) DEALLOCATE(SWdn200clr, SWdn200) DEALLOCATE(SWup200clr, SWup200) DEALLOCATE(LWdn200clr, LWdn200) DEALLOCATE(LWup200clr, LWup200) DEALLOCATE(LWdnTOA, LWdnTOAclr) ! pressure level DEALLOCATE(tsumSTD) DEALLOCATE(usumSTD, vsumSTD) DEALLOCATE(wsumSTD, phisumSTD) DEALLOCATE(tnondef) DEALLOCATE(qsumSTD, rhsumSTD) DEALLOCATE(uvsumSTD) DEALLOCATE(vqsumSTD) DEALLOCATE(vTsumSTD) DEALLOCATE(wqsumSTD) DEALLOCATE(vphisumSTD) DEALLOCATE(wTsumSTD) DEALLOCATE(u2sumSTD) DEALLOCATE(v2sumSTD) DEALLOCATE(T2sumSTD) DEALLOCATE(O3sumSTD) DEALLOCATE(O3daysumSTD) !IM beg DEALLOCATE(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD) DEALLOCATE(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD) !IM end DEALLOCATE(seed_old) DEALLOCATE(zuthe, zvthe) DEALLOCATE(alb_neig) DEALLOCATE(ema_cbmf) DEALLOCATE(ema_pcb, ema_pct) DEALLOCATE(Mipsh, Ma, qcondc) DEALLOCATE(wd, sigd) DEALLOCATE(cin, ALE, ALP) DEALLOCATE(ftd, fqd) DEALLOCATE(Ale_bl, Alp_bl) DEALLOCATE(ale_wake) DEALLOCATE(ale_bl_stat) DEALLOCATE(lalim_conv, wght_th) DEALLOCATE(wake_deltat, wake_deltaq) DEALLOCATE(wake_s, awake_dens, wake_dens) DEALLOCATE(wake_Cstar, wake_pe, wake_fip) !jyg< DEALLOCATE(wake_delta_pbl_TKE) !nrlmd< DEALLOCATE(delta_tsurf) !>nrlmd !>jyg DEALLOCATE(pfrac_impa, pfrac_nucl) DEALLOCATE(pfrac_1nucl) DEALLOCATE(total_rain, nday_rain) DEALLOCATE(paire_ter) DEALLOCATE(albsol1, albsol2) !albedo SB >>> DEALLOCATE(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con) !albedo SB <<< DEALLOCATE(wo) DEALLOCATE(clwcon0,rnebcon0) DEALLOCATE(heat, heat0) DEALLOCATE(cool, cool0) DEALLOCATE(heat_volc, cool_volc) DEALLOCATE(topsw, toplw) DEALLOCATE(sollwdown, sollwdownclr) DEALLOCATE(gustiness) DEALLOCATE(toplwdown, toplwdownclr) DEALLOCATE(topsw0,toplw0,solsw0,sollw0) DEALLOCATE(albpla) !IM ajout variables CFMIP2/CMIP5 DEALLOCATE(heatp, coolp) DEALLOCATE(heat0p, cool0p) DEALLOCATE(radsolp, topswp, toplwp) DEALLOCATE(albplap) DEALLOCATE(solswp, solswfdiffp, sollwp) DEALLOCATE(sollwdownp) DEALLOCATE(topsw0p,toplw0p) DEALLOCATE(solsw0p,sollw0p) DEALLOCATE(lwdnc0p, lwdn0p, lwdnp) DEALLOCATE(lwupc0p, lwup0p, lwupp) DEALLOCATE(swdnc0p, swdn0p, swdnp) DEALLOCATE(swupc0p, swup0p, swupp) DEALLOCATE(cape) DEALLOCATE(pbase,bbase) DEALLOCATE(zqasc) DEALLOCATE(ibas_con, itop_con) DEALLOCATE(rain_con, snow_con) DEALLOCATE(rlonPOS) DEALLOCATE(newsst) DEALLOCATE(ustar,u10m, v10m,wstar) DEALLOCATE(topswad, solswad) DEALLOCATE(topswai, solswai) DEALLOCATE(tau_aero,piz_aero,cg_aero) DEALLOCATE(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm) DEALLOCATE(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm) DEALLOCATE(ccm) if (ok_gwd_rando) DEALLOCATE(du_gwd_rando) if (.not. ok_hines .and. ok_gwd_rando) DEALLOCATE(du_gwd_front) DEALLOCATE(ale_bl_trig) DEALLOCATE(ratqs_inter) if (activate_ocean_skin >= 1) deALLOCATE(delta_sal, ds_ns, dt_ns, & delta_sst) is_initialized=.FALSE. END SUBROUTINE phys_state_var_end END MODULE phys_state_var_mod