From 66cb6b92bd36f5c50341313860c8b44a3871738a Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 20 Mar 2023 16:59:36 +0100 Subject: [PATCH] Philippe 21/03/2023: ZSOLVER: continue transfer and merging of ZSOLVER/ sources into MNH/ (work in progress, compilation OK, runs MNH CPU+GPU OK, runs ZSOLVER CPU-only OK) --- src/MNH/anel_balancen.f90 | 45 +- src/MNH/ini_dynamics.f90 | 55 +- src/MNH/ini_modeln.f90 | 25 +- src/MNH/ini_spectren.f90 | 13 +- src/MNH/modd_dynn.f90 | 44 +- src/MNH/modeln.f90 | 9 +- src/MNH/pressurez.f90 | 22 + src/MNH/read_exsegn.f90 | 7 +- src/MNH/tridz.f90 | 42 +- src/ZSOLVER/anel_balancen.f90 | 330 ---- src/ZSOLVER/conjgrad.f90 | 291 ---- src/ZSOLVER/conresol.f90 | 272 --- src/ZSOLVER/conresolz.f90 | 295 ---- src/ZSOLVER/ini_dynamics.f90 | 640 ------- src/ZSOLVER/ini_modeln.f90 | 2721 ------------------------------ src/ZSOLVER/ini_spectren.f90 | 941 ----------- src/ZSOLVER/modd_dynn.f90 | 406 ----- src/ZSOLVER/read_exsegn.f90 | 2997 --------------------------------- 18 files changed, 235 insertions(+), 8920 deletions(-) delete mode 100644 src/ZSOLVER/anel_balancen.f90 delete mode 100644 src/ZSOLVER/conjgrad.f90 delete mode 100644 src/ZSOLVER/conresol.f90 delete mode 100644 src/ZSOLVER/conresolz.f90 delete mode 100644 src/ZSOLVER/ini_dynamics.f90 delete mode 100644 src/ZSOLVER/ini_modeln.f90 delete mode 100644 src/ZSOLVER/ini_spectren.f90 delete mode 100644 src/ZSOLVER/modd_dynn.f90 delete mode 100644 src/ZSOLVER/read_exsegn.f90 diff --git a/src/MNH/anel_balancen.f90 b/src/MNH/anel_balancen.f90 index 540e56b76..1c14b8262 100644 --- a/src/MNH/anel_balancen.f90 +++ b/src/MNH/anel_balancen.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -173,8 +173,13 @@ INTEGER :: IMI ! model index !JUAN INTEGER :: IIU_B,IJU_B,IKU INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBFB,ZBF_SXP2_YP1_Z -!JUAN +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBFB,ZBF_SXP2_YP1_Z +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZAF_ZS,ZBF_ZS,ZCF_ZS +REAL, DIMENSION(:,:) , ALLOCATABLE :: ZDXATH_ZS,ZDYATH_ZS +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO_ZS +REAL, DIMENSION(:), ALLOCATABLE :: ZA_K,ZB_K,ZC_K,ZD_K +#endif ! INTEGER :: IINFO_ll TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange @@ -196,6 +201,22 @@ ALLOCATE(ZTRIGSY(3*(NJMAX_ll+2*JPHEXT))) IKU=SIZE(XRHODJ,3) CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) ALLOCATE(ZBFB(IIU_B,IJU_B,IKU)) +! +#ifdef MNH_MGSOLVER +IF ( CPRESOPT == 'ZSOLV' ) THEN + ALLOCATE(ZAF_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(ZBF_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(ZCF_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(ZDXATH_ZS(IIU_B,IJU_B)) + ALLOCATE(ZDYATH_ZS(IIU_B,IJU_B)) + ALLOCATE(ZRHO_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(ZA_K(IKU)) + ALLOCATE(ZB_K(IKU)) + ALLOCATE(ZC_K(IKU)) + ALLOCATE(ZD_K(IKU)) +END IF +#endif +! CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll) ALLOCATE(ZBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) !JUAN Z_SPLITING @@ -208,9 +229,17 @@ CALL MPPDB_CHECK3D(XUT,"anel_balancen1-::XUT",PRECISION) ! ------------------------------- ! ! -CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM, & +CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,CPRESOPT, & + ZDXHATM,ZDYHATM,ZRHOM, & ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY,& +#ifndef MNH_MGSOLVER ZBFB,ZBF_SXP2_YP1_Z) +#else + ZBFB,ZBF_SXP2_YP1_Z, & + ZAF_ZS,ZBF_ZS,ZCF_ZS, & + ZDXATH_ZS,ZDYATH_ZS,ZRHO_ZS, & + ZA_K,ZB_K,ZC_K,ZD_K) !JUAN FULL ZSOLVER +#endif CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-after TRIDZ::XRHODJ",PRECISION) ! !------------------------------------------------------------------------------- @@ -272,7 +301,15 @@ CALL PRESSUREZ(CLBCX,CLBCY,CPRESOPT,NITR,LITRADJ,ITCOUNT,XRELAX,IMI, & IRR,IRRL,IRRI,ZDRYMASST,ZREFMASS,ZMASS_O_PHI0, & ZTH,ZRR,XRHODREF,XTHVREF,XRVREF,XEXNREF, XLINMASS, & ZRU,ZRV,ZRW,ZPABST, & +#ifndef MNH_MGSOLVER ZBFB,ZBF_SXP2_YP1_Z,PRESIDUAL ) +#else + ZBFB,ZBF_SXP2_YP1_Z, & + XAF_ZS,XBF_ZS,XCF_ZS, & + XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & + XA_K,XB_K,XC_K,XD_K, & + PRESIDUAL ) +#endif ! CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen3.2-after pressurez halo::XRHODJ",PRECISION) CALL MPPDB_CHECK3D(ZRU,"anel_balancen3.2-after pressurez::ZRU",PRECISION) diff --git a/src/MNH/ini_dynamics.f90 b/src/MNH/ini_dynamics.f90 index 13ea80bc1..eed1f9389 100644 --- a/src/MNH/ini_dynamics.f90 +++ b/src/MNH/ini_dynamics.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -8,7 +8,7 @@ ! ######################## INTERFACE SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & - PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP, & + PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,HPRESOPT, & OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & @@ -26,8 +26,15 @@ SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & PALK,PALKW,KALBOT,PALKBAS,PALKWBAS,KALBAS, & OMASK_RELAX,PKURELAX, PKVRELAX, PKWRELAX, & PDK2U,PDK4U,PDK2TH,PDK4TH,PDK2SV,PDK4SV,OZDIFFU,PZDIFFU_HALO2,& - PBFB,& + PBFB, & +#ifndef MNH_MGSOLVER PBF_SXP2_YP1_Z) !JUAN Z_SPLITING +#else + PBF_SXP2_YP1_Z, & + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER +#endif ! intent in arguments ! USE MODE_TYPE_ZDIFFU @@ -112,7 +119,8 @@ REAL, INTENT(IN) :: PT4DIFU ! Damping time scale for 2*dx wavelength REAL, INTENT(IN) :: PT4DIFTH ! for meteorological scalar variables REAL, INTENT(IN) :: PT4DIFSV ! for tracer scalar variables -REAL, INTENT(IN) :: PTSTEP ! Time step +REAL, INTENT(IN) :: PTSTEP ! Time step +CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! choice of the pressure solver ! ! intent out arguments ! @@ -172,6 +180,13 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFB ! elements of the tri-diag matrix ! on an b-slice of global physical domain REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide ! matrix in the pressure eq. +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAF_ZS,PBF_ZS,PCF_ZS +REAL, DIMENSION(:,:) , INTENT(OUT) :: PDXATH_ZS,PDYATH_ZS +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHO_ZS +REAL, DIMENSION(:) , INTENT(OUT) :: A_K,B_K,C_K,D_K +#endif + END SUBROUTINE INI_DYNAMICS ! END INTERFACE @@ -179,7 +194,7 @@ END INTERFACE END MODULE MODI_INI_DYNAMICS ! ###################################################################### SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & - PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP, & + PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,HPRESOPT, & OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & @@ -197,8 +212,15 @@ SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & PALK,PALKW,KALBOT,PALKBAS,PALKWBAS,KALBAS, & OMASK_RELAX,PKURELAX, PKVRELAX, PKWRELAX, & PDK2U,PDK4U,PDK2TH,PDK4TH,PDK2SV,PDK4SV,OZDIFFU,PZDIFFU_HALO2,& - PBFB,& - PBF_SXP2_YP1_Z) !JUAN Z_SPLITING + PBFB, & +#ifndef MNH_MGSOLVER + PBF_SXP2_YP1_Z) !JUAN Z_SPLITING +#else + PBF_SXP2_YP1_Z, & + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER +#endif ! ###################################################################### ! !!**** *INI_DYNAMICS* - routine to initialize the parameters for the dynamics @@ -389,7 +411,8 @@ REAL, INTENT(IN) :: PT4DIFU ! Damping time scale for 2*dx wavelength REAL, INTENT(IN) :: PT4DIFTH ! for meteorological scalar variables REAL, INTENT(IN) :: PT4DIFSV ! for tracer scalar variables -REAL, INTENT(IN) :: PTSTEP ! Time step +REAL, INTENT(IN) :: PTSTEP ! Time step +CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! choice of the pressure solver ! ! intent out arguments ! @@ -447,6 +470,12 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFB ! elements of the tri-diag matrix ! on an b-slice of global physical domain REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide ! matrix in the pressure eq. +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAF_ZS,PBF_ZS,PCF_ZS +REAL, DIMENSION(:,:) , INTENT(OUT) :: PDXATH_ZS,PDYATH_ZS +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHO_ZS +REAL, DIMENSION(:) , INTENT(OUT) :: A_K,B_K,C_K,D_K +#endif ! !* 0.2 declarations of local variables ! @@ -504,10 +533,18 @@ IF (.NOT.L1D) THEN ! PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & ! PRHODJ,PTHVREF,PZZ,PBFY) CALL TRIDZ(HLBCX,HLBCY, & - PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF, & + PMAP,PDXHAT,PDYHAT,HPRESOPT, & + PDXHATM,PDYHATM,PRHOM,PAF, & PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & PRHODJ,PTHVREF,PZZ,PBFY,PBFB, & +#ifndef MNH_MGSOLVER PBF_SXP2_YP1_Z) +#else + PBF_SXP2_YP1_Z, & + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER +#endif END IF ! ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 45d2945f1..e9baccd68 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -1085,6 +1085,20 @@ ELSE END IF CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) ALLOCATE(XBFB(IIU_B,IJU_B,IKU)) +#ifdef MNH_MGSOLVER +IF ( CPRESOPT == 'ZSOLV' ) THEN + ALLOCATE(XAF_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(XBF_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(XCF_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(XDXATH_ZS(IIU_B,IJU_B)) + ALLOCATE(XDYATH_ZS(IIU_B,IJU_B)) + ALLOCATE(XRHO_ZS(IIU_B,IJU_B,IKU)) + ALLOCATE(XA_K(IKU)) + ALLOCATE(XB_K(IKU)) + ALLOCATE(XC_K(IKU)) + ALLOCATE(XD_K(IKU)) +END IF +#endif CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll) ALLOCATE(XBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) ALLOCATE(XAF(IKU),XCF(IKU)) @@ -2212,7 +2226,7 @@ IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') & ! ------------------------------------------ ! CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,CLBCX,CLBCY,XTSTEP, & + XZHAT,CLBCX,CLBCY,XTSTEP,CPRESOPT, & LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & @@ -2231,7 +2245,14 @@ CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX, & XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV, & LZDIFFU,XZDIFFU_HALO2, & - XBFB,XBF_SXP2_YP1_Z ) +#ifndef MNH_MGSOLVER + XBFB,XBF_SXP2_YP1_Z ) +#else + XBFB,XBF_SXP2_YP1_Z, & + XAF_ZS,XBF_ZS,XCF_ZS, & + XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & + XA_K,XB_K,XC_K,XD_K ) +#endif !$acc update device( XRHOM, XAF, XBFY, XCF, XTRIGSX, XTRIGSY, NIFAXX, NIFAXY, XBFB, XBF_SXP2_YP1_Z ) diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index 1067f2cef..2428e7979 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2015-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2015-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -894,7 +894,7 @@ ALLOCATE(XALKBAS(0)) ALLOCATE(XALKWBAS(0)) ! CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,CLBCX,CLBCY,XTSTEP, & + XZHAT,CLBCX,CLBCY,XTSTEP,CPRESOPT, & LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & @@ -913,7 +913,14 @@ CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX, & XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV, & LZDIFFU,XZDIFFU_HALO2, & - XBFB,XBF_SXP2_YP1_Z ) +#ifndef MNH_MGSOLVER + XBFB,XBF_SXP2_YP1_Z ) +#else + XBFB,XBF_SXP2_YP1_Z, & + XAF_ZS,XBF_ZS,XCF_ZS, & + XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & + XA_K,XB_K,XC_K,XD_K) +#endif ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/modd_dynn.f90 b/src/MNH/modd_dynn.f90 index bf719ed52..363e9b055 100644 --- a/src/MNH/modd_dynn.f90 +++ b/src/MNH/modd_dynn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -67,6 +67,12 @@ TYPE DYN_t REAL, DIMENSION(:,:,:), POINTER :: XBF_SXP2_YP1_Z=>NULL() ! Vectors giving the non REAL, DIMENSION(:,:,:), POINTER :: XBF=>NULL() ! vanishing elements of the REAL, DIMENSION(:), POINTER :: XAF=>NULL(),XCF=>NULL() ! tri-diag matrix in the pressure equation +#ifdef MNH_MGSOLVER + REAL, DIMENSION(:,:,:), POINTER :: XAF_ZS=>NULL(), XBF_ZS=>NULL(), XCF_ZS=>NULL() ! coef for Zsolver + REAL, DIMENSION(:,:) , POINTER :: XDXATH_ZS=>NULL(), XDYATH_ZS=>NULL() + REAL, DIMENSION(:,:,:), POINTER :: XRHO_ZS=>NULL() + REAL, DIMENSION(:), POINTER :: XA_K=>NULL(), XB_K=>NULL(), XC_K=>NULL(), XD_K=>NULL() +#endif ! ! Arrays of sinus or cosinus ! values for the FFT @@ -188,6 +194,12 @@ REAL, DIMENSION(:,:,:), POINTER :: XBFB=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XBF_SXP2_YP1_Z=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XBF=>NULL() REAL, DIMENSION(:), POINTER :: XAF=>NULL(),XCF=>NULL() +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), POINTER :: XAF_ZS=>NULL(), XBF_ZS=>NULL(), XCF_ZS=>NULL() +REAL, DIMENSION(:,:) , POINTER :: XDXATH_ZS=>NULL(), XDYATH_ZS=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XRHO_ZS=>NULL() +REAL, DIMENSION(:), POINTER :: XA_K=>NULL(), XB_K=>NULL(), XC_K=>NULL(), XD_K=>NULL() +#endif REAL, DIMENSION(:), POINTER :: XTRIGSX=>NULL() REAL, DIMENSION(:), POINTER :: XTRIGSY=>NULL() INTEGER, DIMENSION(:), POINTER :: NIFAXX=>NULL() @@ -271,6 +283,21 @@ DYN_MODEL(KFROM)%XBF_SXP2_YP1_Z=>XBF_SXP2_YP1_Z DYN_MODEL(KFROM)%XBF=>XBF DYN_MODEL(KFROM)%XAF=>XAF DYN_MODEL(KFROM)%XCF=>XCF + +#ifdef MNH_MGSOLVER +DYN_MODEL(KFROM)%XAF_ZS=>XAF_ZS +DYN_MODEL(KFROM)%XBF_ZS=>XBF_ZS +DYN_MODEL(KFROM)%XCF_ZS=>XCF_ZS + +DYN_MODEL(KFROM)%XDXATH_ZS=>XDXATH_ZS +DYN_MODEL(KFROM)%XDYATH_ZS=>XDYATH_ZS +DYN_MODEL(KFROM)%XRHO_ZS=>XRHO_ZS +DYN_MODEL(KFROM)%XA_K=>XA_K +DYN_MODEL(KFROM)%XB_K=>XB_K +DYN_MODEL(KFROM)%XC_K=>XC_K +DYN_MODEL(KFROM)%XD_K=>XD_K +#endif + DYN_MODEL(KFROM)%XTRIGSX=>XTRIGSX DYN_MODEL(KFROM)%XTRIGSY=>XTRIGSY DYN_MODEL(KFROM)%XRHOM=>XRHOM @@ -292,6 +319,21 @@ XBF_SXP2_YP1_Z=>DYN_MODEL(KTO)%XBF_SXP2_YP1_Z XBF=>DYN_MODEL(KTO)%XBF XAF=>DYN_MODEL(KTO)%XAF XCF=>DYN_MODEL(KTO)%XCF + +#ifdef MNH_MGSOLVER +XAF_ZS=>DYN_MODEL(KTO)%XAF_ZS +XBF_ZS=>DYN_MODEL(KTO)%XBF_ZS +XCF_ZS=>DYN_MODEL(KTO)%XCF_ZS + +XDXATH_ZS=>DYN_MODEL(KFROM)%XDXATH_ZS +XDYATH_ZS=>DYN_MODEL(KFROM)%XDYATH_ZS +XRHO_ZS=>DYN_MODEL(KFROM)%XRHO_ZS +XA_K=>DYN_MODEL(KFROM)%XA_K +XB_K=>DYN_MODEL(KFROM)%XB_K +XC_K=>DYN_MODEL(KFROM)%XC_K +XD_K=>DYN_MODEL(KFROM)%XD_K +#endif + XTRIGSX=>DYN_MODEL(KTO)%XTRIGSX XTRIGSY=>DYN_MODEL(KTO)%XTRIGSY NIFAXX=>DYN_MODEL(KTO)%NIFAXX diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index ceda1aedb..37e3d4061 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1840,8 +1840,15 @@ IF(.NOT. L1D) THEN NRR,NRRL,NRRI,XDRYMASST,XREFMASS,XMASS_O_PHI0, & XTHT,XRT,XRHODREF,XTHVREF,XRVREF,XEXNREF, XLINMASS, & XRUS, XRVS, XRWS, XPABST, & - XBFB,& + XBFB, & +#ifndef MNH_MGSOLVER XBF_SXP2_YP1_Z) !JUAN Z_SPLITING +#else + XBF_SXP2_YP1_Z, & + XAF_ZS,XBF_ZS,XCF_ZS, & + XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & + XA_K,XB_K,XC_K,XD_K) !JUAN FULL ZSOLVER +#endif !$acc end data !$acc update self( XRUS, XRVS, XRWS, XPABST ) ! diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90 index 15df86c77..8faeb1d9d 100644 --- a/src/MNH/pressurez.f90 +++ b/src/MNH/pressurez.f90 @@ -18,6 +18,11 @@ INTERFACE PRUS,PRVS,PRWS,PPABST, & PBFB, & PBF_SXP2_YP1_Z, & +#ifdef MNH_MGSOLVER + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K, & +#endif PRESIDUAL ) !JUAN Z_SPLITING ! IMPLICIT NONE @@ -97,6 +102,12 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PBFB ! elements of the tri-diag b-sl ! matrix in the pressure eq. REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide ! matrix in the pressure eq. +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), INTENT(IN) :: PAF_ZS,PBF_ZS,PCF_ZS +REAL, DIMENSION(:,:) , INTENT(IN) :: PDXATH_ZS,PDYATH_ZS +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO_ZS +REAL, DIMENSION(:) , INTENT(IN) :: A_K,B_K,C_K,D_K +#endif REAL, OPTIONAL :: PRESIDUAL !JUAN Z_SPLITING END SUBROUTINE PRESSUREZ @@ -114,6 +125,11 @@ END MODULE MODI_PRESSUREZ PRUS,PRVS,PRWS,PPABST, & PBFB, & PBF_SXP2_YP1_Z, & +#ifdef MNH_MGSOLVER + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K, & +#endif PRESIDUAL ) !JUAN Z_SPLITING ! ###################################################################### ! @@ -351,6 +367,12 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PBFB ! elements of the tri-diag b-sl ! matrix in the pressure eq. REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide ! matrix in the pressure eq. +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), INTENT(IN) :: PAF_ZS,PBF_ZS,PCF_ZS +REAL, DIMENSION(:,:) , INTENT(IN) :: PDXATH_ZS,PDYATH_ZS +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO_ZS +REAL, DIMENSION(:) , INTENT(IN) :: A_K,B_K,C_K,D_K +#endif REAL, OPTIONAL :: PRESIDUAL !JUAN Z_SPLITING ! diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 9db15fc16..f71986e8f 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -845,7 +845,12 @@ END IF ! !------------------------------------------------------------------------------- ! +#ifndef MNH_MGSOLVER CALL TEST_NAM_VAR(ILUOUT,'CPRESOPT',CPRESOPT,'RICHA','CGRAD','CRESI','ZRESI') +#else +CALL TEST_NAM_VAR(ILUOUT,'CPRESOPT',CPRESOPT,'RICHA','CGRAD','CRESI','ZRESI','ZSOLV',& + 'ZGRAD') +#endif ! CALL TEST_NAM_VAR(ILUOUT,'CUVW_ADV_SCHEME',CUVW_ADV_SCHEME, & 'CEN4TH','CEN2ND','WENO_K' ) diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90 index 2d93c3386..841bb618b 100644 --- a/src/MNH/tridz.f90 +++ b/src/MNH/tridz.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -10,10 +10,18 @@ INTERFACE ! SUBROUTINE TRIDZ(HLBCX,HLBCY, & - PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM, & + PMAP,PDXHAT,PDYHAT,HPRESOPT, & + PDXHATM,PDYHATM,PRHOM, & PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - PRHODJ,PTHVREF,PZZ,PBFY,PBFB,& + PRHODJ,PTHVREF,PZZ,PBFY,PBFB, & +#ifndef MNH_MGSOLVER PBF_SXP2_YP1_Z)!JUAN Z_SPLITING +#else + PBF_SXP2_YP1_Z, & + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER +#endif ! IMPLICIT NONE ! @@ -30,6 +38,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height z ! REAL, DIMENSION(:), INTENT(IN) :: PDXHAT ! Stretching in x direction REAL, DIMENSION(:), INTENT(IN) :: PDYHAT ! Stretching in y direction +CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! choice of the pressure solver ! REAL, INTENT(OUT) :: PDXHATM ! mean grid increment in the x ! direction @@ -48,6 +57,12 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFB ! elements (bsplit slide) of the ! matrix in the pressure eq. REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide ! matrix in the pressure eq +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAF_ZS,PBF_ZS,PCF_ZS +REAL, DIMENSION(:,:) , INTENT(OUT) :: PDXATH_ZS,PDYATH_ZS +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHO_ZS +REAL, DIMENSION(:) , INTENT(OUT) :: A_K,B_K,C_K,D_K +#endif !JUAN ! ! arrays of sin or cos values @@ -69,10 +84,18 @@ END MODULE MODI_TRIDZ ! ! ################################################################### SUBROUTINE TRIDZ(HLBCX,HLBCY, & - PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM, & + PMAP,PDXHAT,PDYHAT,HPRESOPT, & + PDXHATM,PDYHATM,PRHOM, & PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - PRHODJ,PTHVREF,PZZ,PBFY,PBFB,& - PBF_SXP2_YP1_Z) !JUAN Z_SPLITING + PRHODJ,PTHVREF,PZZ,PBFY,PBFB, & +#ifndef MNH_MGSOLVER + PBF_SXP2_YP1_Z)!JUAN Z_SPLITING +#else + PBF_SXP2_YP1_Z, & + PAF_ZS,PBF_ZS,PCF_ZS, & + PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & + A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER +#endif ! #################################################################### ! !!**** *TRIDZ * - Compute coefficients for the flat operator @@ -211,6 +234,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height z ! REAL, DIMENSION(:), INTENT(IN) :: PDXHAT ! Stretching in x direction REAL, DIMENSION(:), INTENT(IN) :: PDYHAT ! Stretching in y direction +CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! choice of the pressure solver ! REAL, INTENT(OUT) :: PDXHATM ! mean grid increment in the x ! direction @@ -229,6 +253,12 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFB ! elements (bsplit slide) of the ! matrix in the pressure eq. REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide ! matrix in the pressure eq. +#ifdef MNH_MGSOLVER +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAF_ZS,PBF_ZS,PCF_ZS +REAL, DIMENSION(:,:) , INTENT(OUT) :: PDXATH_ZS,PDYATH_ZS +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHO_ZS +REAL, DIMENSION(:) , INTENT(OUT) :: A_K,B_K,C_K,D_K +#endif !JUAN ! ! arrays of sin or cos values diff --git a/src/ZSOLVER/anel_balancen.f90 b/src/ZSOLVER/anel_balancen.f90 deleted file mode 100644 index 27c6a691d..000000000 --- a/src/ZSOLVER/anel_balancen.f90 +++ /dev/null @@ -1,330 +0,0 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ########################## - MODULE MODI_ANEL_BALANCE_n -! ########################## -! -INTERFACE -! -SUBROUTINE ANEL_BALANCE_n(PRESIDUAL) -! -REAL, OPTIONAL :: PRESIDUAL -END SUBROUTINE ANEL_BALANCE_n -! -END INTERFACE -! -END MODULE MODI_ANEL_BALANCE_n -! -! -! -! ################################ - SUBROUTINE ANEL_BALANCE_n(PRESIDUAL) -! -! ################################ -! -! -!!**** *ANEL_BALANCE_n* - routine to apply an anelastic correction -!! -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to fulfill the anelastic balance -! in case of non-vanishing orography -! -! -! -!!** METHOD -!! ------ -!! The coefficients for the flat operator are first computed. Then the -!! pressure equation is solved and the pressure gradient is added to the wind -!! components in order to render this wind field non-divergent. -!! -!! EXTERNAL -!! -------- -!! TRID : to compute coefficients for the flat operator -!! PRESSURE : to solve the pressure equation and add the pressure term to -!! wind -!! MXM,MYM,MZM : to average a field at mass point in the x,y,z directions -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! Module MODD_CONF : contains configuration variables for all models. -!! NVERB : verbosity level for output-listing -!! -!! Module MODD_GRID_n : contains grid variables -!! XMAP,XXHAT,XYHAT,XZZ -!! -!! Module MODD_REF_n : contains reference state variables -!! XRHODJ,XTHVREF,XEXNREF,XRHODREF,XRVREF -!! -!! Module MODD_REF_n : contains reference state variables -!! XLINMASS : lineic mass along the lateral boundaries -!! -!! Module MODD_FIELD_n : contains prognostic variables -!! XUT,XVT,XWT,XTHT,XRT -!! -!! Module MODD_DYN_n : contains parameters for the dynamics -!! CPRESOPT : option for the pressure solver -!! NITR : number of iterations for the solver -!! XRELAX : relaxation coefficient used in the Richardson method -!! -!! Module MODD_LBC_n : contains parameters relative to the boundaries -!! CLBCX : choice of lateral boundary condition along x -!! CLBCY : choice of lateral boundary condition along y -!! -!! REFERENCE -!! --------- -!! NONE -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 6/09/94 -!! J. Stein 4/11/94 put the pressure solver parameters in namelist -!! J. Stein 2/12/94 source cleaning -!! J.P. Lafore 03/01/95 call to PRESSURE to account for absolute pressure -!! J. Stein 17/01/95 bug in the pressure call -!! J. Stein 15/03/95 remove R from the historical variables -!! J.Stein and J.P. lafore 17/04/96 new version including the way to choose -!! the model number and the instant where the projection is performed -!! Stein,Lafore 14/01/97 new anelastic equations -!! M.Faivre 2014 -!! M.Moge 08/2015 removing UPDATE_HALO_ll(XRHODJ) + EXTRAPOL on ZRU and ZRV in part 3.1 -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODE_ll -USE MODE_MODELN_HANDLER -! -USE MODD_CONF ! declarative modules -USE MODD_PARAMETERS -USE MODD_GRID_n -USE MODD_DIM_n -USE MODD_METRICS_n -USE MODD_REF_n -USE MODD_FIELD_n -USE MODD_DYN_n -USE MODD_LBC_n -! -USE MODI_TRIDZ ! interface modules -USE MODI_PRESSUREZ -USE MODE_SPLITTINGZ_ll -USE MODI_SHUMAN -! -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODE_MPPDB -USE MODE_EXTRAPOL -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments : -! -REAL, OPTIONAL :: PRESIDUAL -! -!* 0.2 Declarations of local variables : -! -INTEGER :: IRESP ! return code -INTEGER :: IIY,IJY ! same variable for Y decomposition -INTEGER :: ITCOUNT ! counter value of temporal loop set to 1 ( this - ! means that no guess of the pressure is available for - ! the pressure solver -REAL :: ZDXHATM ! mean grid increment in the x direction -REAL :: ZDYHATM ! mean grid increment in the y direction -REAL, DIMENSION (SIZE(XRHODJ,3)) :: ZRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(SIZE(XRHODJ,3)) :: ZAF,ZCF ! vector giving the nonvanishing -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBFY ! elements of the tri-diag matrix - ! in the pressure equation -REAL, DIMENSION(:), ALLOCATABLE :: ZTRIGSX ! arrays of sin or cos values for -REAL, DIMENSION(:), ALLOCATABLE :: ZTRIGSY ! the FFT in x and y directions -INTEGER, DIMENSION(19) :: IIFAXX ! decomposition in prime numbers -INTEGER, DIMENSION(19) :: IIFAXY ! for the FFT in x and y - ! directions -REAL, DIMENSION(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3)) :: ZPABST - ! Potential at time t -REAL, DIMENSION(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3)) :: ZRU,ZRV,ZRW - ! Rhod * (U,V,W) -REAL, DIMENSION(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3)) :: ZTH -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRR -! -INTEGER :: IRR ! Total number of water variables -INTEGER :: IRRL ! Number of liquid water variables -INTEGER :: IRRI ! Number of solid water variables -REAL :: ZDRYMASST ! Mass of dry air Md -REAL :: ZREFMASS ! Total mass of the ref. atmosphere -REAL :: ZMASS_O_PHI0 ! Mass / Phi0 -INTEGER :: IMI ! model index -!JUAN -INTEGER :: IIU_B,IJU_B,IKU -INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBFB,ZBF_SXP2_YP1_Z -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZAF_ZS,ZBF_ZS,ZCF_ZS -REAL, DIMENSION(:,:) , ALLOCATABLE :: ZDXATH_ZS,ZDYATH_ZS -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO_ZS -REAL, DIMENSION(:), ALLOCATABLE :: ZA_K,ZB_K,ZC_K,ZD_K -!JUAN -! -INTEGER :: IINFO_ll -TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange -! -!------------------------------------------------------------------------------- -! -!* 1. PROLOGUE : -! -------- -! -CALL GET_DIM_EXT_ll('Y',IIY,IJY) -IF (L2D) THEN - ALLOCATE(ZBFY(IIY,IJY,SIZE(XRHODJ,3))) -ELSE - ALLOCATE(ZBFY(IJY,IIY,SIZE(XRHODJ,3))) -ENDIF -ALLOCATE(ZTRIGSX(3*(NIMAX_ll+2*JPHEXT))) -ALLOCATE(ZTRIGSY(3*(NJMAX_ll+2*JPHEXT))) -!JUAN Z_SPLITING -IKU=SIZE(XRHODJ,3) -CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) -ALLOCATE(ZBFB(IIU_B,IJU_B,IKU)) -! -ALLOCATE(ZAF_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(ZBF_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(ZCF_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(ZDXATH_ZS(IIU_B,IJU_B)) -ALLOCATE(ZDYATH_ZS(IIU_B,IJU_B)) -ALLOCATE(ZRHO_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(ZA_K(IKU)) -ALLOCATE(ZB_K(IKU)) -ALLOCATE(ZC_K(IKU)) -ALLOCATE(ZD_K(IKU)) -! -CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll) -ALLOCATE(ZBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) -! -!JUAN Z_SPLITING -CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-::XRHODJ",PRECISION) -CALL MPPDB_CHECK3D(XUT,"anel_balancen1-::XUT",PRECISION) -! -!------------------------------------------------------------------------------- -! -!* 2. PRESSURE SOLVER INITIALIZATION : -! ------------------------------- -! -! -CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,CPRESOPT, & - ZDXHATM,ZDYHATM,ZRHOM, & - ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY,& - ZBFB,ZBF_SXP2_YP1_Z, & - ZAF_ZS,ZBF_ZS,ZCF_ZS, & - ZDXATH_ZS,ZDYATH_ZS,ZRHO_ZS, & - ZA_K,ZB_K,ZC_K,ZD_K) !JUAN FULL ZSOLVER -CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-after TRIDZ::XRHODJ",PRECISION) -! -!------------------------------------------------------------------------------- -! -!* 3. ANELASTIC CORRECTION : -! --------------------- -! -! -!* 3.1 multiplication by RHODJ -! -!$20140710 UPHALO on XRHODJ -!CALL ADD3DFIELD_ll( TZFIELDS_ll, XRHODJ, 'ANEL_BALANCE_n::XRHODJ' ) -!CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -!CALL CLEANLIST_ll(TZFIELDS_ll) -CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen3.1-after update halo::XRHODJ",PRECISION) -CALL MPPDB_CHECK3D(XUT,"anel_balancen3.1-after update halo::XUT",PRECISION) -CALL MPPDB_CHECK3D(XWT,"anel_balancen3.1-after update halo::XWT",PRECISION) -! -ZRU(:,:,:) = MXM(XRHODJ) * XUT(:,:,:) -ZRV(:,:,:) = MYM(XRHODJ) * XVT(:,:,:) -ZRW(:,:,:) = MZM(XRHODJ) * XWT(:,:,:) -ZTH(:,:,:) = XTHT(:,:,:) -ALLOCATE(ZRR(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),SIZE(XRT,4))) -ZRR(:,:,:,:) = XRT(:,:,:,:) -!20131112 appli update_halo_ll -CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRU, 'ANEL_BALANCE_n::ZRU' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRV, 'ANEL_BALANCE_n::ZRV' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRW, 'ANEL_BALANCE_n::ZRW' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTH, 'ANEL_BALANCE_n::ZTH' ) -CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -CALL CLEANLIST_ll(TZFIELDS_ll) -CALL MPPDB_CHECK3D(ZRU,"anel_balancen3.1-after1stupdhalo::ZRU",PRECISION) -!$20131125 add extrapol on ZRU to have correct boundaries -!CALL EXTRAPOL('W',ZRU) ! ZRU boundaries now correct -CALL MPPDB_CHECK3D(ZRU,"anel_balancen3.1-afterextrapol W::ZRU",PRECISION) -!20131126 add extrapol on ZRV to have correct boundaries -!CALL EXTRAPOL('S',ZRV) ! ZRV boundaries now correct -CALL MPPDB_CHECK3D(ZRV,"anel_balancen3.1-afterextrapol S::ZRV",PRECISION) -CALL MPPDB_CHECK3D(ZRW,"anel_balancen3.1-afterextrapol S::ZRW",PRECISION) -! -! -! -! -!* 3.2 satisfy the anelastic constraint -! -ITCOUNT =-1 ! no first guess of the pressure is available -ZPABST(:,:,:)= 0. ! ==================CAUTION===================== -ZDRYMASST = 0. ! | Initialization necessary for the | -ZREFMASS = 0. ! | computation of the absolute pressure, | -ZMASS_O_PHI0 = 1. ! | which is here not needed | -IRR = 0 ! | | -IRRL = 0 ! | | -IRRI = 0 ! ============================================== -! -IMI = GET_CURRENT_MODEL_INDEX() -CALL PRESSUREZ(CLBCX,CLBCY,CPRESOPT,NITR,LITRADJ,ITCOUNT,XRELAX,IMI, & - XRHODJ,XDXX,XDYY,XDZZ,XDZX,XDZY,ZDXHATM,ZDYHATM,ZRHOM, & - ZAF,ZBFY,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY, & - IRR,IRRL,IRRI,ZDRYMASST,ZREFMASS,ZMASS_O_PHI0, & - ZTH,ZRR,XRHODREF,XTHVREF,XRVREF,XEXNREF, XLINMASS, & - ZRU,ZRV,ZRW,ZPABST, & - ZBFB,ZBF_SXP2_YP1_Z, & - XAF_ZS,XBF_ZS,XCF_ZS, & - XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & - XA_K,XB_K,XC_K,XD_K, & - PRESIDUAL ) -! -CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen3.2-after pressurez halo::XRHODJ",PRECISION) -CALL MPPDB_CHECK3D(ZRU,"anel_balancen3.2-after pressurez::ZRU",PRECISION) -CALL MPPDB_CHECK3D(ZRV,"anel_balancen3.2-after pressurez::ZRV",PRECISION) -! -DEALLOCATE(ZBFY,ZTRIGSX,ZTRIGSY,ZRR,ZBF_SXP2_YP1_Z) -!* 3.2 return to the historical variables -! -!20131112 appli update_halo_ll and associated operations -XUT(:,:,:) = ZRU(:,:,:) / MXM(XRHODJ) -XVT(:,:,:) = ZRV(:,:,:) / MYM(XRHODJ) -XWT(:,:,:) = ZRW(:,:,:) / MZM(XRHODJ) -!20131112 appli update_halo_ll to XUT,XVT,XWT -CALL ADD3DFIELD_ll( TZFIELDS_ll, XUT, 'ANEL_BALANCE_n::XUT' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, XVT, 'ANEL_BALANCE_n::XVT' ) -CALL ADD3DFIELD_ll( TZFIELDS_ll, XWT, 'ANEL_BALANCE_n::XWT' ) -CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -CALL CLEANLIST_ll(TZFIELDS_ll) -CALL MPPDB_CHECK3D(XUT,"anel_balancen3.2-afterupdhalo::XUT",PRECISION) -CALL MPPDB_CHECK3D(XVT,"anel_balancen3.2-afterupdhalo::XVT",PRECISION) -!20131125 apply extrapol to fix boundary issue in // -CALL EXTRAPOL('W',XUT) -CALL EXTRAPOL('S',XVT) -CALL MPPDB_CHECK3D(XUT,"anel_balancen3.2-after extrapolW::XUT",PRECISION) -CALL MPPDB_CHECK3D(XVT,"anel_balancen3.2-after extrapolS::XVT",PRECISION) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE ANEL_BALANCE_n diff --git a/src/ZSOLVER/conjgrad.f90 b/src/ZSOLVER/conjgrad.f90 deleted file mode 100644 index 54e9ad6d8..000000000 --- a/src/ZSOLVER/conjgrad.f90 +++ /dev/null @@ -1,291 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 solver 2006/05/18 13:07:25 -!----------------------------------------------------------------- -! #################### - MODULE MODI_CONJGRAD -! #################### -! -INTERFACE -! - SUBROUTINE CONJGRAD(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV, & - PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - KITR,PY,PPHI) -! -IMPLICIT NONE -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type -! - ! Metric coefficients: -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHETAV ! virtual potential temp. at time t -! -REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(IN) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(IN) :: PRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(:), INTENT(IN) :: PAF,PCF ! vectors giving the nonvanishing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF ! elements of the tri-diag. - ! matrix in the pressure eq. -! - ! arrays of sin or cos values - ! for the FFT : -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSX ! - along x -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSY ! - along y -! - ! decomposition in prime - ! numbers for the FFT: -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXX ! - along x -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXY ! - along y -! -INTEGER, INTENT(IN) :: KITR ! number of iterations for the - ! pressure solver -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PY ! RHS of the equation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHI ! solution of the equation -! -END SUBROUTINE CONJGRAD -! -END INTERFACE -! -END MODULE MODI_CONJGRAD -! -! -! -! ######################################################################### - SUBROUTINE CONJGRAD(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV, & - PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - KITR,PY,PPHI) -! ######################################################################### -! -!!**** *CONJGRAD * - solve an elliptic equation by the conjugate gradient -!! method -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to solve an elliptic equation using -! the preditioned conjugate gradient (CG) method. This is a version of the -! CG called ORTHOMIN (Young and Jea 1980). -! -!!** METHOD -!! ------ -!! The equation to be solved reads: -!! -!! Q (PHI) = Y -!! -!! where Q is the quasi-Laplacian ( subroutine QLAP ) and PHI the pressure -!! function. -!! We precondition the problem by the operator F : -!! -1 -1 -!! F * Q (PHI) = F (Y) -!! F represents the flat Laplacian ie. without orography. Its inversion is -!! realized in the routine FLAT_INV. This equation is solved with a Conjugate -!! Gradient method. -!! The initial guess is given by the pressure at the previous time step. -!! The resolution stops after ITR iterations of the solver. -!! -!! EXTERNAL -!! -------- -!! Subroutine GDIV: compute J times the divergence of 1/J times a vector -!! Function QLAP: compute the complete quasi-Laplacian Q -!! Subroutine FLAT_INV : invert the flat quasi-laplacien F -!! Function DOTPROD: compute the dot product of 2 vectors -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODI_GDIV: interface for the subroutine GDIV -!! Module MODI_QLAP: interface for the function QLAP -!! Module MODI_FLAT_INV: interface for the subroutine FLAT_INV -!! Module MODI_DOTPROD: interface for the function DOTPROD -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine CONJGRAD) -!! Kapitza and Eppel (1992) Beit. Physik ... -!! Young and Jea (1980) .... -!! -!! AUTHOR -!! ------ -!! P. HÃ…reil and J. Stein * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 25/07/94 -!! -!! 14/01/97 Durran anelastic equation (Stein,Lafore) -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODI_GDIV -USE MODI_QLAP -USE MODI_FLAT_INV -USE MODI_DOTPROD -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type -! - ! Metric coefficients: -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHETAV ! virtual potential temp. at time t -! -REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(IN) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(IN) :: PRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(:), INTENT(IN) :: PAF,PCF ! vectors giving the nonvanishing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF ! elements of the tri-diag. - ! matrix in the pressure eq. -! - ! arrays of sin or cos values - ! for the FFT : -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSX ! - along x -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSY ! - along y -! - ! decomposition in prime - ! numbers for the FFT: -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXX ! - along x -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXY ! - along y -! -INTEGER, INTENT(IN) :: KITR ! number of iterations for the - ! pressure solver -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PY ! RHS of the equation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHI ! solution of the equation -! -!* 0.2 declarations of local variables -! -INTEGER :: JM ! loop index -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZDELTA - ! array containing the auxilary field DELTA of the CG method -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZP - ! array containing the auxilary field P of the CG method -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZWORK ! work - ! array containing the source term to be multiplied by the F inverse -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZWORKD ! work - ! array containing the result of the F inversion * Q (DELTA) -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZWORKP ! work - ! array containing the result of the F inversion * Q (P) -! -REAL :: ZALPHA, ZLAMBDA ! amplitude of the descent in the Conjugate - ! directions -REAL :: ZDOTPP ! dot product of ZWORKP by itself -! -!------------------------------------------------------------------------------- -! -!* 1. INITIALIZATIONS -! --------------- -! -ZLAMBDA = 0. -ZP = 0. -! -!------------------------------------------------------------------------------- -! -!* 2. ITERATIVE LOOP -! -------------- -! -DO JM = 1,KITR -! -!* 2.1 compute the new pressure function -! - PPHI = PPHI + ZLAMBDA * ZP ! the case JM =0 is special because - ! PPHI is not changed -! -!* 2.2 compute the auxiliary field DELTA -! -! -1 -! compute the vector DELTA = F * ( Y - Q ( PHI ) ) -! - ZWORK = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,PPHI) - ! Q (PHI) -! - ZWORK = PY - ZWORK ! Y - Q (PHI) -! - CALL FLAT_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, &! -1 - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZWORK,ZDELTA) ! F (Y - Q (PHI))) -! -!* 2.3 compute the auxiliary field P -! -! -1 -! compute the vector P = DELTA + alpha F * Q ( DELTA ) -! - IF (JM == 1) THEN - ZP = ZDELTA ! P = DELTA at the first solver iteration - ELSE - ZWORK = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY, & - PDZZ,PRHODJ,PTHETAV,ZDELTA) ! Q ( DELTA ) - CALL FLAT_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & ! -1 - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZWORK,ZWORKD) ! F * Q ( DELTA ) -! - ZALPHA = - DOTPROD(ZWORKD,ZWORKP,HLBCX,HLBCY)/ZDOTPP ! ZWORKP,ZDOTPP come - ! from the previous solver iteration (section 2.4) - ZP = ZDELTA + ZALPHA * ZP ! new vector P -! - END IF -! -!* 2.4 compute LAMBDA -! -! - ZWORK = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,& - PDZZ,PRHODJ,PTHETAV,ZP) ! Q ( P ) - CALL FLAT_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,& ! -1 - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZWORK,ZWORKP) ! F * Q ( P ) -! -! store the scalar product to compute lambda and next P - ZDOTPP = DOTPROD(ZWORKP,ZWORKP,HLBCX,HLBCY) -! - ZLAMBDA = DOTPROD(ZDELTA,ZWORKP,HLBCX,HLBCY) / ZDOTPP ! lambda -! -! -END DO ! end of the loop for the iterative solver -! -!------------------------------------------------------------------------------- -! -!* 3. COMPUTE THE FINAL PRESSURE FUNCTION -! ----------------------------------- -! -PPHI = PPHI + ZLAMBDA * ZP -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE CONJGRAD diff --git a/src/ZSOLVER/conresol.f90 b/src/ZSOLVER/conresol.f90 deleted file mode 100644 index 4f720d67b..000000000 --- a/src/ZSOLVER/conresol.f90 +++ /dev/null @@ -1,272 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 solver 2006/05/18 13:07:25 -!----------------------------------------------------------------- -! #################### - MODULE MODI_CONRESOL -! #################### -! -INTERFACE -! - SUBROUTINE CONRESOL(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV, & - PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - KITR,PY,PPHI) -! -IMPLICIT NONE -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type -! - ! Metric coefficients: -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHETAV ! virtual pot. temp. at time t -! -REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(IN) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(IN) :: PRHOM ! XRHODJ mean on the X Y plane - ! localized at a mass level -! -REAL, DIMENSION(:), INTENT(IN) :: PAF,PCF ! vectors giving the nonvanishing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF ! elements of the tri-diag. - ! matrix in the pressure eq. -! - ! arrays of sin or cos values - ! for the FFT : -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSX ! - along x -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSY ! - along y -! - ! decomposition in prime - ! numbers for the FFT: -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXX ! - along x -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXY ! - along y -! -INTEGER, INTENT(IN) :: KITR ! number of iterations for the - ! pressure solver -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PY ! RHS of the equation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHI ! solution of the equation -! -END SUBROUTINE CONRESOL -! -END INTERFACE -! -END MODULE MODI_CONRESOL -! -! -! -! ######################################################################### - SUBROUTINE CONRESOL(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV, & - PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - KITR,PY,PPHI) -! ######################################################################### -! -!!**** *CONRESOL * - solve an elliptic equation by the conjugate residual -!! method -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to solve an elliptic equation using -! the preconditioned conjugate residual (CR) method. This is a version -! of the scheme proposed by Skamarock, Smolarkiewicz and Klemp (MWR, 1997). -! -!!** METHOD -!! ------ -!! The equation to be solved reads: -!! -!! Q (PHI) = Y -!! -!! where Q is the quasi-Laplacian ( subroutine QLAP ) and PHI the pressure -!! function. -!! We precondition the problem by the operator F : -!! -1 -1 -!! F * Q (PHI) = F (Y) -!! F represents the flat Laplacian ie. without orography. Its inversion is -!! realized in the routine FLAT_INV. This equation is solved with a Conjugate -!! Residual method. -!! The initial guess is given by the pressure at the previous time step. -!! The resolution stops after ITR iterations of the solver. -!! -!! EXTERNAL -!! -------- -!! Subroutine GDIV: compute J times the divergence of 1/J times a vector -!! Function QLAP: compute the complete quasi-Laplacian Q -!! Subroutine FLAT_INV : invert the flat quasi-laplacien F -!! Function DOTPROD: compute the dot product of 2 vectors -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODI_GDIV: interface for the subroutine GDIV -!! Module MODI_QLAP: interface for the function QLAP -!! Module MODI_FLAT_INV: interface for the subroutine FLAT_INV -!! Module MODI_DOTPROD: interface for the function DOTPROD -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine CONRESOL) -!! Skamarock, Smolarkiewicz and Klemp (1997) MWR -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 25/08/99 -!! J.-P. Pinty & P. Jabouille -!! 11/07/00 bug in ZALPHA -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODI_GDIV -USE MODI_QLAP -USE MODI_FLAT_INV -USE MODI_DOTPROD -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type -! - ! Metric coefficients: -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHETAV ! virtual pot. temp. at time t -! -REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(IN) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(IN) :: PRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(:), INTENT(IN) :: PAF,PCF ! vectors giving the nonvanishing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF ! elements of the tri-diag. - ! matrix in the pressure eq. -! - ! arrays of sin or cos values - ! for the FFT : -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSX ! - along x -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSY ! - along y -! - ! decomposition in prime - ! numbers for the FFT: -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXX ! - along x -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXY ! - along y -! -INTEGER, INTENT(IN) :: KITR ! number of iterations for the - ! pressure solver -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PY ! RHS of the equation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHI ! solution of the equation -! -!* 0.2 declarations of local variables -! -INTEGER :: JM ! loop index -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZDELTA, ZKSI - ! array containing the auxilary fields DELTA and KSI of the CR method -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZP, ZQ - ! array containing the auxilary fields P and Q of the CR method -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZRESIDUE - ! array containing the error field at each iteration Q(PHI) - Y -! -REAL :: ZALPHA, ZLAMBDA ! amplitude of the descent in the Conjugate - ! directions -REAL :: ZDOT_DELTA ! dot product of ZDELTA by itself -! -!------------------------------------------------------------------------------- -! -!* 1. INITIALIZATIONS -! --------------- -! -! -!* 1.1 compute the vector: r^(0) = Q(PHI) - Y -! -ZRESIDUE = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,PPHI) - PY -! -!* 1.2 compute the vector: p^(0) = F^(-1)*( Q(PHI) - Y ) -! -CALL FLAT_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZRESIDUE,ZP) -! -!* 1.3 compute the vector: delta^(0) = Q ( p^(0) ) -! -ZDELTA = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,ZP) -! -!------------------------------------------------------------------------------- -! -!* 2. ITERATIVE LOOP -! -------------- -! -DO JM = 1,KITR -! -!* 2.1 compute the step LAMBDA -! - ZDOT_DELTA = DOTPROD(ZDELTA, ZDELTA,HLBCX,HLBCY) ! norm of DELTA - ZLAMBDA = - DOTPROD(ZRESIDUE,ZDELTA,HLBCX,HLBCY) / ZDOT_DELTA -! -!* 2.2 update the pressure function PHI -! - PPHI = PPHI + ZLAMBDA * ZP -! -! - IF( JM == KITR ) EXIT -! -! -!* 2.3 update the residual error: r -! - ZRESIDUE = ZRESIDUE + ZLAMBDA * ZDELTA -! -!* 2.4 compute the vector: q = F^(-1)*( Q(PHI) - Y ) -! - CALL FLAT_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZRESIDUE,ZQ) -! -!* 2.5 compute the auxiliary field: ksi = Q ( q ) -! - ZKSI= QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,ZQ) -! -1 -!* 2.6 compute the step ALPHA -! - ZALPHA = - DOTPROD(ZKSI,ZDELTA,HLBCX,HLBCY) / ZDOT_DELTA ! lambda -! -!* 2.7 update p and DELTA -! - ZP = ZQ + ZALPHA * ZP - ZDELTA = ZKSI + ZALPHA * ZDELTA -! -END DO ! end of the loop for the iterative solver -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE CONRESOL diff --git a/src/ZSOLVER/conresolz.f90 b/src/ZSOLVER/conresolz.f90 deleted file mode 100644 index 17c514b33..000000000 --- a/src/ZSOLVER/conresolz.f90 +++ /dev/null @@ -1,295 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- -!----------------------------------------------------------------- -! #################### - MODULE MODI_CONRESOLZ -! #################### -! -INTERFACE -! - SUBROUTINE CONRESOLZ(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV, & - PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - KITR,PY,PPHI, & - PBFB,& - PBF_SXP2_YP1_Z) !JUAN Z_SPLITING -! -IMPLICIT NONE -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type -! - ! Metric coefficients: -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHETAV ! virtual pot. temp. at time t -! -REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(IN) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(IN) :: PRHOM ! XRHODJ mean on the X Y plane - ! localized at a mass level -! -REAL, DIMENSION(:), INTENT(IN) :: PAF,PCF ! vectors giving the nonvanishing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF ! elements of the tri-diag. - ! matrix in the pressure eq. -! - ! arrays of sin or cos values - ! for the FFT : -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSX ! - along x -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSY ! - along y -! - ! decomposition in prime - ! numbers for the FFT: -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXX ! - along x -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXY ! - along y -! -INTEGER, INTENT(IN) :: KITR ! number of iterations for the - ! pressure solver -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PY ! RHS of the equation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHI ! solution of the equation -! -!JUAN Z_SPLITING -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBFB ! elements of the tri-diag. b-slide - ! matrix in the pressure eq. -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide - ! matrix in the pressure eq. -!JUAN Z_SPLITING -END SUBROUTINE CONRESOLZ -! -END INTERFACE -! -END MODULE MODI_CONRESOLZ -! -! -! -! ######################################################################### - SUBROUTINE CONRESOLZ(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV, & - PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - KITR,PY,PPHI, & - PBFB,& - PBF_SXP2_YP1_Z) !JUAN Z_SPLITING -! ######################################################################### -! -!!**** *CONRESOLZ * - solve an elliptic equation by the conjugate residual -!! method -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to solve an elliptic equation using -! the preconditioned conjugate residual (CR) method. This is a version -! of the scheme proposed by Skamarock, Smolarkiewicz and Klemp (MWR, 1997). -! -!!** METHOD -!! ------ -!! The equation to be solved reads: -!! -!! Q (PHI) = Y -!! -!! where Q is the quasi-Laplacian ( subroutine QLAP ) and PHI the pressure -!! function. -!! We precondition the problem by the operator F : -!! -1 -1 -!! F * Q (PHI) = F (Y) -!! F represents the flat Laplacian ie. without orography. Its inversion is -!! realized in the routine FLAT_INVZ. This equation is solved with a Conjugate -!! Residual method. -!! The initial guess is given by the pressure at the previous time step. -!! The resolution stops after ITR iterations of the solver. -!! -!! EXTERNAL -!! -------- -!! Subroutine GDIV: compute J times the divergence of 1/J times a vector -!! Function QLAP: compute the complete quasi-Laplacian Q -!! Subroutine FLAT_INVZ : invert the flat quasi-laplacien F -!! Function DOTPROD: compute the dot product of 2 vectors -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODI_GDIV: interface for the subroutine GDIV -!! Module MODI_QLAP: interface for the function QLAP -!! Module MODI_FLAT_INVZ: interface for the subroutine FLAT_INVZ -!! Module MODI_DOTPROD: interface for the function DOTPROD -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine CONRESOL) -!! Skamarock, Smolarkiewicz and Klemp (1997) MWR -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 25/08/99 -!! J.-P. Pinty & P. Jabouille -!! 11/07/00 bug in ZALPHA -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODI_GDIV -USE MODI_QLAP -USE MODI_FLAT_INVZ -USE MODI_DOTPROD -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type -! - ! Metric coefficients: -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHETAV ! virtual pot. temp. at time t -! -REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(IN) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(IN) :: PRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(:), INTENT(IN) :: PAF,PCF ! vectors giving the nonvanishing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF ! elements of the tri-diag. - ! matrix in the pressure eq. -! - ! arrays of sin or cos values - ! for the FFT : -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSX ! - along x -REAL, DIMENSION(:), INTENT(IN) :: PTRIGSY ! - along y -! - ! decomposition in prime - ! numbers for the FFT: -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXX ! - along x -INTEGER, DIMENSION(19), INTENT(IN) :: KIFAXY ! - along y -! -INTEGER, INTENT(IN) :: KITR ! number of iterations for the - ! pressure solver -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PY ! RHS of the equation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHI ! solution of the equation -!JUAN Z_SPLITING -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBFB ! elements of the tri-diag. b-slide - ! matrix in the pressure eq. -REAL, DIMENSION(:,:,:), INTENT(IN) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide - ! matrix in the pressure eq. -!JUAN Z_SPLITING -! -!* 0.2 declarations of local variables -! -INTEGER :: JM ! loop index -! -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZDELTA, ZKSI - ! array containing the auxilary fields DELTA and KSI of the CR method -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZP, ZQ - ! array containing the auxilary fields P and Q of the CR method -REAL, DIMENSION(SIZE(PPHI,1),SIZE(PPHI,2),SIZE(PPHI,3)) :: ZRESIDUE - ! array containing the error field at each iteration Q(PHI) - Y -! -REAL :: ZALPHA, ZLAMBDA ! amplitude of the descent in the Conjugate - ! directions -REAL :: ZDOT_DELTA ! dot product of ZDELTA by itself -! -!------------------------------------------------------------------------------- -! -!* 1. INITIALIZATIONS -! --------------- -! -! -!* 1.1 compute the vector: r^(0) = Q(PHI) - Y -! -ZRESIDUE = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,PPHI) - PY -! -!* 1.2 compute the vector: p^(0) = F^(-1)*( Q(PHI) - Y ) -! -CALL FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZRESIDUE,ZP,& - PBFB,& - PBF_SXP2_YP1_Z) !JUAN Z_SPLITING -!JUAN print*, "size ZP=",SIZE(ZP) -!JUAN print*, "size ZRESIDUE=",SIZE(ZRESIDUE) -! -!* 1.3 compute the vector: delta^(0) = Q ( p^(0) ) -! -ZDELTA = QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,ZP) -! -!------------------------------------------------------------------------------- -! -!* 2. ITERATIVE LOOP -! -------------- -! -DO JM = 1,KITR -! -!* 2.1 compute the step LAMBDA -! - ZDOT_DELTA = DOTPROD(ZDELTA, ZDELTA,HLBCX,HLBCY) ! norm of DELTA - ZLAMBDA = - DOTPROD(ZRESIDUE,ZDELTA,HLBCX,HLBCY) / ZDOT_DELTA -! -!* 2.2 update the pressure function PHI -! - PPHI = PPHI + ZLAMBDA * ZP -! -! - IF( JM == KITR ) EXIT -! -! -!* 2.3 update the residual error: r -! - ZRESIDUE = ZRESIDUE + ZLAMBDA * ZDELTA -! -!* 2.4 compute the vector: q = F^(-1)*( Q(PHI) - Y ) -! -CALL FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,ZRESIDUE,ZQ, & - PBFB,& - PBF_SXP2_YP1_Z) !JUAN Z_SPLITTING -! -!* 2.5 compute the auxiliary field: ksi = Q ( q ) -! - ZKSI= QLAP(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,PRHODJ,PTHETAV,ZQ) -! -1 -!* 2.6 compute the step ALPHA -! - ZALPHA = - DOTPROD(ZKSI,ZDELTA,HLBCX,HLBCY) / ZDOT_DELTA ! lambda -! -!* 2.7 update p and DELTA -! - ZP = ZQ + ZALPHA * ZP - ZDELTA = ZKSI + ZALPHA * ZDELTA -! -END DO ! end of the loop for the iterative solver -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE CONRESOLZ diff --git a/src/ZSOLVER/ini_dynamics.f90 b/src/ZSOLVER/ini_dynamics.f90 deleted file mode 100644 index 40aa0eb77..000000000 --- a/src/ZSOLVER/ini_dynamics.f90 +++ /dev/null @@ -1,640 +0,0 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ######################## - MODULE MODI_INI_DYNAMICS -! ######################## -INTERFACE -SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & - PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,HPRESOPT, & - OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & - OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & - OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & - OHORELAX_SVC2R2,OHORELAX_SVC1R3,OHORELAX_SVELEC,OHORELAX_SVLG,& - OHORELAX_SVCHEM,OHORELAX_SVAER,OHORELAX_SVDST,OHORELAX_SVSLT, & - OHORELAX_SVPP,OHORELAX_SVCS, OHORELAX_SVCHIC,OHORELAX_SVSNW, & -#ifdef MNH_FOREFIRE - OHORELAX_SVFF, & -#endif - PRIMKMAX,KRIMX,KRIMY,PALKTOP,PALKGRD,PALZBOT,PALZBAS, & - PT4DIFU,PT4DIFTH,PT4DIFSV, & - PCORIOX,PCORIOY,PCORIOZ,PCURVX,PCURVY, & - PDXHATM,PDYHATM,PRHOM,PAF,PBFY,PCF, & - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - PALK,PALKW,KALBOT,PALKBAS,PALKWBAS,KALBAS, & - OMASK_RELAX,PKURELAX, PKVRELAX, PKWRELAX, & - PDK2U,PDK4U,PDK2TH,PDK4TH,PDK2SV,PDK4SV,OZDIFFU,PZDIFFU_HALO2,& - PBFB, & - PBF_SXP2_YP1_Z, & - PAF_ZS,PBF_ZS,PCF_ZS, & - PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & - A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER -! intent in arguments -! -USE MODE_TYPE_ZDIFFU -IMPLICIT NONE -! -REAL, DIMENSION(:,:), INTENT(IN) :: PLON,PLAT !Longitude and latitude -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! rho J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! virtual potential - ! temperature of the reference state -REAL, DIMENSION(:,:), INTENT(IN) :: PMAP ! Map factor -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height -REAL, DIMENSION(:), INTENT(IN) :: PDXHAT ! Stretching in x direction -REAL, DIMENSION(:), INTENT(IN) :: PDYHAT ! Stretching in y direction -REAL, DIMENSION(:), INTENT(IN) :: PZHAT ! Gal-Chen Height -CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCY ! y-direction LBC type -LOGICAL, INTENT(IN) :: OVE_RELAX ! logical - ! switch to activate the VErtical RELAXation -LOGICAL, INTENT(IN) :: OVE_RELAX_GRD ! logical - ! switch to activate the VErtical RELAXation (ground layer) -LOGICAL, INTENT(IN) :: OHORELAX_UVWTH ! switch for the - ! horizontal relaxation for U,V,W,TH -LOGICAL, INTENT(IN) :: OHORELAX_RV ! switch for the - ! horizontal relaxation for Rv -LOGICAL, INTENT(IN) :: OHORELAX_RC ! switch for the - ! horizontal relaxation for Rc -LOGICAL, INTENT(IN) :: OHORELAX_RR ! switch for the - ! horizontal relaxation for Rr -LOGICAL, INTENT(IN) :: OHORELAX_RI ! switch for the - ! horizontal relaxation for Ri -LOGICAL, INTENT(IN) :: OHORELAX_RS ! switch for the - ! horizontal relaxation for Rs -LOGICAL, INTENT(IN) :: OHORELAX_RG ! switch for the - ! horizontal relaxation for Rg -LOGICAL, INTENT(IN) :: OHORELAX_RH ! switch for the - ! horizontal relaxation for Rh -LOGICAL, INTENT(IN) :: OHORELAX_TKE ! switch for the - ! horizontal relaxation for tke -LOGICAL,DIMENSION(:),INTENT(IN):: OHORELAX_SV ! switch for the - ! horizontal relaxation for sv variables -LOGICAL, INTENT(IN):: OHORELAX_SVC2R2 ! switch for the - ! horizontal relaxation for c2r2 variables -LOGICAL, INTENT(IN):: OHORELAX_SVC1R3 ! switch for the - ! horizontal relaxation for c1r3 variables -LOGICAL, INTENT(IN):: OHORELAX_SVELEC ! switch for the - ! horizontal relaxation for elec variables -LOGICAL, INTENT(IN):: OHORELAX_SVLG ! switch for the - ! horizontal relaxation for lg variables -LOGICAL, INTENT(IN):: OHORELAX_SVCHEM ! switch for the - ! horizontal relaxation for chem variables -LOGICAL, INTENT(IN):: OHORELAX_SVCHIC ! switch for the - ! horizontal relaxation for ice chem variables -LOGICAL, INTENT(IN):: OHORELAX_SVAER ! switch for the - ! horizontal relaxation for aer variables -LOGICAL, INTENT(IN):: OHORELAX_SVDST ! switch for the - ! horizontal relaxation for dst variables -LOGICAL, INTENT(IN):: OHORELAX_SVSLT ! switch for the - ! horizontal relaxation for slt variables -LOGICAL, INTENT(IN):: OHORELAX_SVPP ! switch for the - ! horizontal relaxation for passive pollutants -LOGICAL, INTENT(IN):: OHORELAX_SVSNW ! switch for the - ! horizontal relaxation for blowing snow variables -#ifdef MNH_FOREFIRE -LOGICAL, INTENT(IN):: OHORELAX_SVFF ! switch for the - ! horizontal relaxation for ForeFire variables -#endif -LOGICAL, INTENT(IN):: OHORELAX_SVCS ! switch for the - ! horizontal relaxation for conditional sampling -REAL, INTENT(IN) :: PRIMKMAX !Max. value of the horiz. - ! relaxation coefficients -INTEGER, INTENT(IN) :: KRIMX,KRIMY ! Number of points in - ! the rim zone in the x and y directions -REAL, INTENT(IN) :: PALKTOP ! Damping coef. at the top of the absorbing - ! layer -REAL, INTENT(IN) :: PALKGRD ! Damping coef. at the top of the absorbing - ! layer -REAL, INTENT(IN) :: PALZBOT ! Height of the absorbing layer base -REAL, INTENT(IN) :: PALZBAS ! Height of the absorbing layer base -REAL, INTENT(IN) :: PT4DIFU ! Damping time scale for 2*dx wavelength - ! specified for the 4nd order num. diffusion - ! for momentum -REAL, INTENT(IN) :: PT4DIFTH ! for meteorological scalar variables -REAL, INTENT(IN) :: PT4DIFSV ! for tracer scalar variables - -REAL, INTENT(IN) :: PTSTEP ! Time step -CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! choice of the pressure solver -! -! intent out arguments -! -REAL, INTENT(OUT) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(OUT) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(OUT) :: PRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(:,:), INTENT(OUT) :: PCORIOX,PCORIOY ! Hor. Coriolis parameters -REAL, DIMENSION(:,:), INTENT(OUT) :: PCORIOZ ! Vert. Coriolis parameter -REAL, DIMENSION(:,:), INTENT(OUT) :: PCURVX,PCURVY ! Curvature coefficients -! -REAL, DIMENSION(:), INTENT(OUT) :: PAF ! vectors giving the non-vanishing -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFY ! elements of the tri-diag matrix - ! on an y-slice of global physical domain -REAL, DIMENSION(:), INTENT(OUT) :: PCF ! in the pressure equation -REAL, DIMENSION(:), INTENT(OUT) :: PTRIGSX ! Arrays for sinus or cosinus -REAL, DIMENSION(:), INTENT(OUT) :: PTRIGSY ! values for the FFT in x and - ! y directions -INTEGER, DIMENSION(:), INTENT(OUT) :: KIFAXX ! Decomposition in prime numbers -INTEGER, DIMENSION(:), INTENT(OUT) :: KIFAXY ! for the FFT in x and y - ! direction -INTEGER , INTENT(OUT) :: KALBOT ! Vertical index corresponding - ! to the absorbing layer base -! -REAL, DIMENSION(:), INTENT(OUT) :: PALK ! Function of the absorbing - ! layer damping coefficient - ! defined for u,v,and theta -REAL, DIMENSION(:), INTENT(OUT) :: PALKW ! Idem but defined for w -INTEGER , INTENT(OUT) :: KALBAS ! Vertical index corresponding - ! to the absorbing layer base -! -REAL, DIMENSION(:), INTENT(OUT) :: PALKBAS ! Function of the absorbing - ! layer damping coefficient - ! defined for u,v,and theta -REAL, DIMENSION(:), INTENT(OUT) :: PALKWBAS ! Idem but defined for w -LOGICAL, DIMENSION(:,:), INTENT(OUT) :: OMASK_RELAX ! True where the - ! lateral relax. has to be performed -REAL, DIMENSION(:,:), INTENT(OUT) :: PKURELAX ! Horizontal relaxation -REAL, DIMENSION(:,:), INTENT(OUT) :: PKVRELAX ! coefficients for the -REAL, DIMENSION(:,:), INTENT(OUT) :: PKWRELAX ! u, v and mass locations -REAL, INTENT(OUT) :: PDK2U ! 2nd order num. diffusion coef. /dx2 -REAL, INTENT(OUT) :: PDK4U ! 4nd order num. diffusion coef. /dx4 - ! for momentum -REAL, INTENT(OUT) :: PDK2TH! for meteorological scalar variables -REAL, INTENT(OUT) :: PDK4TH! -REAL, INTENT(OUT) :: PDK2SV! for tracer scalar variables -REAL, INTENT(OUT) :: PDK4SV! -! -LOGICAL, INTENT(IN) :: OZDIFFU -TYPE(TYPE_ZDIFFU_HALO2) :: PZDIFFU_HALO2 -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFB ! elements of the tri-diag matrix - ! on an b-slice of global physical domain -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide - ! matrix in the pressure eq. -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAF_ZS,PBF_ZS,PCF_ZS -REAL, DIMENSION(:,:) , INTENT(OUT) :: PDXATH_ZS,PDYATH_ZS -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHO_ZS -REAL, DIMENSION(:) , INTENT(OUT) :: A_K,B_K,C_K,D_K - -END SUBROUTINE INI_DYNAMICS -! -END INTERFACE -! -END MODULE MODI_INI_DYNAMICS -! ###################################################################### -SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ, & - PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,HPRESOPT, & - OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & - OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & - OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & - OHORELAX_SVC2R2,OHORELAX_SVC1R3,OHORELAX_SVELEC,OHORELAX_SVLG,& - OHORELAX_SVCHEM,OHORELAX_SVAER,OHORELAX_SVDST,OHORELAX_SVSLT, & - OHORELAX_SVPP,OHORELAX_SVCS, OHORELAX_SVCHIC,OHORELAX_SVSNW, & -#ifdef MNH_FOREFIRE - OHORELAX_SVFF, & -#endif - PRIMKMAX,KRIMX,KRIMY,PALKTOP,PALKGRD,PALZBOT,PALZBAS, & - PT4DIFU,PT4DIFTH,PT4DIFSV, & - PCORIOX,PCORIOY,PCORIOZ,PCURVX,PCURVY, & - PDXHATM,PDYHATM,PRHOM,PAF,PBFY,PCF, & - PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - PALK,PALKW,KALBOT,PALKBAS,PALKWBAS,KALBAS, & - OMASK_RELAX,PKURELAX, PKVRELAX, PKWRELAX, & - PDK2U,PDK4U,PDK2TH,PDK4TH,PDK2SV,PDK4SV,OZDIFFU,PZDIFFU_HALO2,& - PBFB, & - PBF_SXP2_YP1_Z, & - PAF_ZS,PBF_ZS,PCF_ZS, & - PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & - A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER -! ###################################################################### -! -!!**** *INI_DYNAMICS* - routine to initialize the parameters for the dynamics -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to set or compute the parameters used -! by the MESONH dynamics : -! * Coriolis parameters -! * Curvature coefficients -! * Pressure solver coefficients -! * Absorbing layer coefficients -! * Numerical difussion coefficients -! -!!** METHOD -!! ------ -!! - Coriolis parameters and curvature terms : -!! Horizontal Coriolis parameters are not initialized if thinshell -!! approximation is made (LTHINSHELL=.TRUE.). -!! Curvature coefficients are not initialized if Cartesian geometry -!! (LCARTESIAN=.TRUE.) -!! - Coefficients and variables for pressure solver : -!! This is done by TRID -!! - Coefficients and variables for the absorbing layer -!! ( upper and lateral) : This is done by RELAXDEF -!! - Coefficients for the numerical diffusion -!! -!! EXTERNAL -!! -------- -!! TRID : to initialize pressure solver -!! RELAXDEF: to compute the relaxation coefficients -!! GET_DIM_EXT_ll : get extended sub-domain sizes -!! -!! Module MODI_TRID : interface for routine TRID -!! Module MODI_RELAXDEF : interface for routine RELAXDEF -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_CONF : contains declaration of configuration variables -!! -!! LTHINSHELL : Logical for THINSHELL approximation -!! .TRUE. = thinshell approximation -!! LCARTESIAN : Logical for cartesian geometry : -!! .TRUE. = cartesian geometry -!! L1D : Logical for 1D configuration : -!! .TRUE. = 1D model -!! -!! Module MODD_CST : contains physical constants -!! -!! XPI : Pi -!! XOMEGA : Earth rotation -!! -!! Module MODD_GRID : contains grid variables -!! -!! XLON0 : Reference longitude for the conformal projection -!! XLAT0 : Reference latitude for the conformal projection -!! XBETA : Rotation angle for the conformal projection -!! XRPK : Projection parameter for the conformal projection -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine INI_DYNAMICS) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/07/94 -!! Modification 18/10/94 (J. Stein) to add the abs. layer -!! Modification 16/11/94 (Lafore+Pinty) to add the num. diffusion -!! Modification 06/12/94 (J.Stein) add the switch LABSLAYER -!! Modification 12/12/94 (J.Stein) add the lateral relaxation -!! Modification 16/01/95 (J.Stein) conditional CALL to trid for 1D case -!! Modification 13/08/98 (N.Asencio) add parallel code -!! Modification 20/05/06 Remove KEPS -!! Modification 07/2013 (Bosseur & Filippi) Adds Forefire -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! Vionnet 07/2017 : blow snow -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -USE MODD_CONF -USE MODD_CST -USE MODD_GRID -USE MODD_LUNIT_n, ONLY: TLUOUT -! -USE MODI_RELAXDEF -! USE MODI_TRID -USE MODI_TRIDZ -USE MODI_ZDIFFUSETUP -! -USE MODE_ll -USE MODE_TYPE_ZDIFFU -#ifdef MNH_BITREP -USE MODI_BITREP -#define SIN BR_SIN -#define COS BR_COS -#endif -! -USE MODE_MPPDB -! -IMPLICIT NONE -! -!* 0.1 declarations of argument -! -! intent in arguments -! -REAL, DIMENSION(:,:), INTENT(IN) :: PLON,PLAT !Longitude and latitude -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! rho J -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! virtual potential - ! temperature of the reference state -REAL, DIMENSION(:,:), INTENT(IN) :: PMAP ! Map factor -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height -REAL, DIMENSION(:), INTENT(IN) :: PDXHAT ! Stretching in x direction -REAL, DIMENSION(:), INTENT(IN) :: PDYHAT ! Stretching in y direction -REAL, DIMENSION(:), INTENT(IN) :: PZHAT ! Gal-Chen Height -CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCX ! x-direction LBC type -CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HLBCY ! y-direction LBC type -LOGICAL, INTENT(IN) :: OVE_RELAX ! logical - ! switch to activate the VErtical RELAXation -LOGICAL, INTENT(IN) :: OVE_RELAX_GRD ! logical - ! switch to activate the VErtical RELAXation (ground layer) -LOGICAL, INTENT(IN) :: OHORELAX_UVWTH ! switch for the - ! horizontal relaxation for U,V,W,TH -LOGICAL, INTENT(IN) :: OHORELAX_RV ! switch for the - ! horizontal relaxation for Rv -LOGICAL, INTENT(IN) :: OHORELAX_RC ! switch for the - ! horizontal relaxation for Rc -LOGICAL, INTENT(IN) :: OHORELAX_RR ! switch for the - ! horizontal relaxation for Rr -LOGICAL, INTENT(IN) :: OHORELAX_RI ! switch for the - ! horizontal relaxation for Ri -LOGICAL, INTENT(IN) :: OHORELAX_RS ! switch for the - ! horizontal relaxation for Rs -LOGICAL, INTENT(IN) :: OHORELAX_RG ! switch for the - ! horizontal relaxation for Rg -LOGICAL, INTENT(IN) :: OHORELAX_RH ! switch for the - ! horizontal relaxation for Rh -LOGICAL, INTENT(IN) :: OHORELAX_TKE ! switch for the - ! horizontal relaxation for tke -LOGICAL,DIMENSION(:),INTENT(IN):: OHORELAX_SV ! switch for the - ! horizontal relaxation for sv variables -LOGICAL, INTENT(IN):: OHORELAX_SVC2R2 ! switch for the - ! horizontal relaxation for c2r2 variables -LOGICAL, INTENT(IN):: OHORELAX_SVC1R3 ! switch for the - ! horizontal relaxation for c1r3 variables -LOGICAL, INTENT(IN):: OHORELAX_SVELEC ! switch for the - ! horizontal relaxation for elec variables -LOGICAL, INTENT(IN):: OHORELAX_SVLG ! switch for the - ! horizontal relaxation for lg variables -LOGICAL, INTENT(IN):: OHORELAX_SVCHEM ! switch for the - ! horizontal relaxation for chem variables -LOGICAL, INTENT(IN):: OHORELAX_SVCHIC ! switch for the - ! horizontal relaxation for ice chem variables -LOGICAL, INTENT(IN):: OHORELAX_SVAER ! switch for the - ! horizontal relaxation for aer variables -LOGICAL, INTENT(IN):: OHORELAX_SVDST ! switch for the - ! horizontal relaxation for dst variables -LOGICAL, INTENT(IN):: OHORELAX_SVSLT ! switch for the - ! horizontal relaxation for slt variables -LOGICAL, INTENT(IN):: OHORELAX_SVPP ! switch for the - ! horizontal relaxation for passive pollutants -LOGICAL, INTENT(IN):: OHORELAX_SVSNW ! switch for the - ! horizontal relaxation for blowing snow variables -#ifdef MNH_FOREFIRE -LOGICAL, INTENT(IN):: OHORELAX_SVFF ! switch for the - ! horizontal relaxation for ForeFire variables -#endif -LOGICAL, INTENT(IN):: OHORELAX_SVCS ! switch for the - ! horizontal relaxation for conditional sampling -REAL, INTENT(IN) :: PRIMKMAX !Max. value of the horiz. - ! relaxation coefficients -INTEGER, INTENT(IN) :: KRIMX,KRIMY ! Number of points in - ! the rim zone in the x and y directions -REAL, INTENT(IN) :: PALKTOP ! Damping coef. at the top of the absorbing - ! layer -REAL, INTENT(IN) :: PALZBOT ! Height of the absorbing layer base -REAL, INTENT(IN) :: PALKGRD ! Damping coef. at the top of the absorbing - ! layer -REAL, INTENT(IN) :: PALZBAS ! Height of the absorbing layer base -REAL, INTENT(IN) :: PT4DIFU ! Damping time scale for 2*dx wavelength - ! specified for the 4nd order num. diffusion - ! for momentum -REAL, INTENT(IN) :: PT4DIFTH ! for meteorological scalar variables -REAL, INTENT(IN) :: PT4DIFSV ! for tracer scalar variables - -REAL, INTENT(IN) :: PTSTEP ! Time step -CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! choice of the pressure solver -! -! intent out arguments -! -REAL, INTENT(OUT) :: PDXHATM ! mean grid increment in the x - ! direction -REAL, INTENT(OUT) :: PDYHATM ! mean grid increment in the y - ! direction -! -REAL, DIMENSION (:), INTENT(OUT) :: PRHOM ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -REAL, DIMENSION(:,:), INTENT(OUT) :: PCORIOX,PCORIOY ! Hor. Coriolis parameters -REAL, DIMENSION(:,:), INTENT(OUT) :: PCORIOZ ! Vert. Coriolis parameter -REAL, DIMENSION(:,:), INTENT(OUT) :: PCURVX,PCURVY ! Curvature coefficients -! -REAL, DIMENSION(:), INTENT(OUT) :: PAF ! vectors giving the non-vanishing -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFY ! elements of the tri-diag matrix - ! on an y-slice of global physical domain -REAL, DIMENSION(:), INTENT(OUT) :: PCF ! in the pressure equation -REAL, DIMENSION(:), INTENT(OUT) :: PTRIGSX ! Arrays for sinus or cosinus -REAL, DIMENSION(:), INTENT(OUT) :: PTRIGSY ! values for the FFT in x and - ! y directions -INTEGER, DIMENSION(:), INTENT(OUT) :: KIFAXX ! Decomposition in prime numbers -INTEGER, DIMENSION(:), INTENT(OUT) :: KIFAXY ! for the FFT in x and y - ! direction -INTEGER , INTENT(OUT) :: KALBOT ! Vertical index corresponding - ! to the absorbing layer base -! -REAL, DIMENSION(:), INTENT(OUT) :: PALK ! Function of the absorbing - ! layer damping coefficient - ! defined for u,v,and theta -REAL, DIMENSION(:), INTENT(OUT) :: PALKW ! Idem but defined for w -INTEGER , INTENT(OUT) :: KALBAS ! Vertical index corresponding - ! to the absorbing layer base -! -REAL, DIMENSION(:), INTENT(OUT) :: PALKBAS ! Function of the absorbing - ! layer damping coefficient - ! defined for u,v,and theta -REAL, DIMENSION(:), INTENT(OUT) :: PALKWBAS ! Idem but defined for w -LOGICAL, DIMENSION(:,:), INTENT(OUT) :: OMASK_RELAX ! True where the - ! lateral relax. has to be performed -REAL, DIMENSION(:,:), INTENT(OUT) :: PKURELAX ! Horizontal relaxation -REAL, DIMENSION(:,:), INTENT(OUT) :: PKVRELAX ! coefficients for the -REAL, DIMENSION(:,:), INTENT(OUT) :: PKWRELAX ! u, v and mass locations -REAL, INTENT(OUT) :: PDK2U ! 2nd order num. diffusion coef. /dx2 -REAL, INTENT(OUT) :: PDK4U ! 4nd order num. diffusion coef. /dx4 - ! for momentum -REAL, INTENT(OUT) :: PDK2TH! for meteorological scalar variables -REAL, INTENT(OUT) :: PDK4TH! -REAL, INTENT(OUT) :: PDK2SV! for tracer scalar variables -REAL, INTENT(OUT) :: PDK4SV! -LOGICAL, INTENT(IN) :: OZDIFFU -TYPE(TYPE_ZDIFFU_HALO2) :: PZDIFFU_HALO2 -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBFB ! elements of the tri-diag matrix - ! on an b-slice of global physical domain -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBF_SXP2_YP1_Z ! elements of the tri-diag. SXP2_YP1_Z-slide - ! matrix in the pressure eq. -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PAF_ZS,PBF_ZS,PCF_ZS -REAL, DIMENSION(:,:) , INTENT(OUT) :: PDXATH_ZS,PDYATH_ZS -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHO_ZS -REAL, DIMENSION(:) , INTENT(OUT) :: A_K,B_K,C_K,D_K -! -!* 0.2 declarations of local variables -! -REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZGAMMA ! Gamma =K(lambda-lambda0) - beta -REAL :: ZMBETA ! -beta -REAL :: ZCDR ! to convert degrees in - ! radians -INTEGER :: ILUOUT ! Logical unit number for output_listing file -INTEGER :: IIU,IJU ! Upper bounds in x,y directions -LOGICAL :: GHORELAX -LOGICAL, DIMENSION(7) :: GHORELAXR ! local array of logical -#ifdef MNH_FOREFIRE -LOGICAL, DIMENSION(13):: GHORELAXSV! local array of logical -#else -LOGICAL, DIMENSION(12):: GHORELAXSV! local array of logical -#endif -! -!------------------------------------------------------------------------------- -! -!* 1. COMPUTES CORIOLIS PARAMETERS AND CURVATURE COEFFICIENTS -! ------------------------------------------------------- -! -ZCDR = XPI/180. -IF (.NOT.LCARTESIAN) THEN - ZGAMMA(:,:) = XRPK * ((PLON(:,:) - XLON0)*ZCDR) - (XBETA*ZCDR) - IF (.NOT.LTHINSHELL) THEN - PCORIOX(:,:) = - 2. * XOMEGA * COS(PLAT(:,:)*ZCDR) * SIN(ZGAMMA(:,:)) - PCORIOY(:,:) = 2. * XOMEGA * COS(PLAT(:,:)*ZCDR) * COS(ZGAMMA(:,:)) - END IF - PCORIOZ(:,:) = 2. * XOMEGA * SIN(PLAT(:,:)*ZCDR) - PCURVX (:,:) = COS(ZGAMMA(:,:)) * (SIN(PLAT(:,:)*ZCDR) -XRPK) & - / COS(PLAT(:,:)*ZCDR) - PCURVY (:,:) = SIN(ZGAMMA(:,:)) * (SIN(PLAT(:,:)*ZCDR) -XRPK) & - / COS(PLAT(:,:)*ZCDR) - ! - CALL MPPDB_CHECK2D(PCORIOX,"ini_dynamics:PCORIOX",PRECISION) - CALL MPPDB_CHECK2D(PCORIOY,"ini_dynamics:PCORIOY",PRECISION) - CALL MPPDB_CHECK2D(PCORIOZ,"ini_dynamics:PCORIOZ",PRECISION) - ! -ELSE - ZMBETA = - (XBETA*ZCDR) - PCORIOX(:,:) = - 2. * XOMEGA * COS(XLAT0*ZCDR) * SIN(ZMBETA) - PCORIOY(:,:) = 2. * XOMEGA * COS(XLAT0*ZCDR) * COS(ZMBETA) - PCORIOZ(:,:) = 2. * XOMEGA * SIN(XLAT0*ZCDR) -END IF -! -!------------------------------------------------------------------------------- -! -!* 2. INITIALIZATION OF PRESSURE SOLVER -! --------------------------------- -! -IF (.NOT.L1D) THEN -! CALL TRID(HLBCX,HLBCY, & -! PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF, & -! PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & -! PRHODJ,PTHVREF,PZZ,PBFY) - CALL TRIDZ(HLBCX,HLBCY, & - PMAP,PDXHAT,PDYHAT,HPRESOPT, & - PDXHATM,PDYHATM,PRHOM,PAF, & - PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY, & - PRHODJ,PTHVREF,PZZ,PBFY,PBFB, & - PBF_SXP2_YP1_Z, & - PAF_ZS,PBF_ZS,PCF_ZS, & - PDXATH_ZS,PDYATH_ZS,PRHO_ZS, & - A_K,B_K,C_K,D_K) !JUAN FULL ZSOLVER -END IF -! -! -! -!------------------------------------------------------------------------------- -! -!* 3. COMPUTE THE ABSORBING LAYER COEFFICIENTS -! ---------------------------------------- -! -GHORELAXR(1) = OHORELAX_RV -GHORELAXR(2) = OHORELAX_RC -GHORELAXR(3) = OHORELAX_RR -GHORELAXR(4) = OHORELAX_RI -GHORELAXR(5) = OHORELAX_RS -GHORELAXR(6) = OHORELAX_RG -GHORELAXR(7) = OHORELAX_RH -! -GHORELAXSV(1) = OHORELAX_SVC2R2 -GHORELAXSV(2) = OHORELAX_SVC1R3 -GHORELAXSV(3) = OHORELAX_SVELEC -GHORELAXSV(4) = OHORELAX_SVLG -GHORELAXSV(5) = OHORELAX_SVCHEM -GHORELAXSV(6) = OHORELAX_SVAER -GHORELAXSV(7) = OHORELAX_SVDST -GHORELAXSV(8) = OHORELAX_SVSLT -GHORELAXSV(9) = OHORELAX_SVPP -GHORELAXSV(10)= OHORELAX_SVCS -GHORELAXSV(11) = OHORELAX_SVCHIC -GHORELAXSV(12) = OHORELAX_SVSNW -#ifdef MNH_FOREFIRE -GHORELAXSV(13) = OHORELAX_SVFF -#endif -! -GHORELAX=ANY(GHORELAXR) .OR. ANY(GHORELAXSV) .OR. ANY(OHORELAX_SV) & - .OR. OHORELAX_UVWTH .OR. OHORELAX_TKE -! -IF (GHORELAX .OR. OVE_RELAX.OR.OVE_RELAX_GRD) THEN - CALL RELAXDEF( OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV, & - OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG, & - OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV, & - OHORELAX_SVC2R2,OHORELAX_SVC1R3,OHORELAX_SVELEC,OHORELAX_SVLG, & - OHORELAX_SVCHEM, OHORELAX_SVAER, OHORELAX_SVDST, OHORELAX_SVSLT, & - OHORELAX_SVPP, OHORELAX_SVCS, OHORELAX_SVCHIC,OHORELAX_SVSNW, & - PALKTOP,PALKGRD, PALZBOT,PALZBAS, & - PZZ, PZHAT, PTSTEP, & - PRIMKMAX,KRIMX,KRIMY, & - PALK, PALKW, KALBOT, & - PALKBAS, PALKWBAS, KALBAS, & - OMASK_RELAX,PKURELAX, PKVRELAX, PKWRELAX ) -END IF -! -! -! -!------------------------------------------------------------------------------- -! -!* 4. COMPUTE THE NUMERICAL DIFFUSION COEFFICIENTS -! -------------------------------------------- -! -PDK4U = 1.0/(16.0*PT4DIFU) ! The damping rate for the 2*dx wavelength is the same -PDK2U = 2.0*PDK4U ! for the 2nd and the 4th order diffusion schemes - ! for momentum -PDK4TH= 1.0/(16.0*PT4DIFTH) ! for meteorological scalar variables -PDK2TH= 2.0*PDK4TH -PDK4SV= 1.0/(16.0*PT4DIFSV) ! for tracer scalar variables -PDK2SV= 2.0*PDK4SV -! -! Call ZDIFFUSETUP if OZDIFFU is true (parameters for truly horizontal diffusion) -! -IF (OZDIFFU) THEN - CALL ZDIFFUSETUP (PZZ,& - PZDIFFU_HALO2) -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 5. PRINT ON OUTPUT_LISTING -! ----------------------- -! -IF (NVERB >= 10) THEN - CALL GET_DIM_EXT_ll ('B',IIU,IJU) - ILUOUT = TLUOUT%NLU -! - WRITE(ILUOUT,*) 'INI_DYNAMICS : Some PCORIOZ values' - WRITE(ILUOUT,*) '(1,1) (IIU/2,IJU/2) (IIU,IJU) ' - WRITE(ILUOUT,*) PCORIOZ(1,1),PCORIOZ(IIU/2,IJU/2),PCORIOZ(IIU,IJU) -! - IF (.NOT.LTHINSHELL) THEN - WRITE(ILUOUT,*) 'INI_DYNAMICS : Some PCORIOX values' - WRITE(ILUOUT,*) '(1,1) (IIU/2,IJU/2) (IIU,IJU) ' - WRITE(ILUOUT,*) PCORIOX(1,1),PCORIOX(IIU/2,IJU/2),PCORIOX(IIU,IJU) -! - WRITE(ILUOUT,*) 'INI_DYNAMICS : Some PCORIOY values' - WRITE(ILUOUT,*) '(1,1) (IIU/2,IJU/2) (IIU,IJU) ' - WRITE(ILUOUT,*) PCORIOY(1,1),PCORIOY(IIU/2,IJU/2),PCORIOY(IIU,IJU) - END IF -! - IF ( .NOT. LCARTESIAN ) THEN - WRITE(ILUOUT,*) 'INI_DYNAMICS : Some PCURVX values' - WRITE(ILUOUT,*) '(1,1) (IIU/2,IJU/2) (IIU,IJU) ' - WRITE(ILUOUT,*) PCURVX(1,1),PCURVX(IIU/2,IJU/2),PCURVX(IIU,IJU) -! - WRITE(ILUOUT,*) 'INI_DYNAMICS : Some PCURVY values' - WRITE(ILUOUT,*) '(1,1) (IIU/2,IJU/2) (IIU,IJU) ' - WRITE(ILUOUT,*) PCURVY(1,1),PCURVY(IIU/2,IJU/2),PCURVY(IIU,IJU) - END IF -END IF -!------------------------------------------------------------------------------- -! -END SUBROUTINE INI_DYNAMICS diff --git a/src/ZSOLVER/ini_modeln.f90 b/src/ZSOLVER/ini_modeln.f90 deleted file mode 100644 index 609de0788..000000000 --- a/src/ZSOLVER/ini_modeln.f90 +++ /dev/null @@ -1,2721 +0,0 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ####################### - MODULE MODI_INI_MODEL_n -! ####################### -! -INTERFACE -! - SUBROUTINE INI_MODEL_n(KMI,TPINIFILE) -! -USE MODD_IO, ONLY: TFILEDATA -! -INTEGER, INTENT(IN) :: KMI ! Model Index -TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file -! -END SUBROUTINE INI_MODEL_n -! -END INTERFACE -! -END MODULE MODI_INI_MODEL_n -! ############################################ - SUBROUTINE INI_MODEL_n(KMI,TPINIFILE) -! ############################################ -! -!!**** *INI_MODEL_n* - routine to initialize the nested model _n -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to initialize the variables -! of the nested model _n. -! -!!** METHOD -!! ------ -!! The initialization of the model _n is performed as follows : -!! - Memory for arrays are then allocated : -!! * If turbulence kinetic energy variable is not needed -!! (CTURB='NONE'), XTKET, XTKEM and XTKES are zero-size arrays. -!! * If dissipation of TKE variable is not needed -!! (CTURBLEN /='KEPS'), XEPST, XEPSM and XREPSS are zero-size arrays. -!! * Memory for mixing ratio arrays is allocated according to the -!! value of logicals LUSERn (the number NRR of moist variables is deduced). -!! * The latitude (XLAT), longitude (XLON) and map factor (XMAP) -!! arrays are zero-size arrays if Cartesian geometry (LCARTESIAN=.TRUE.) -!! * Memory for reference state without orography ( XRHODREFZ and -!! XTHVREFZ) is only allocated in INI_MODEL1 -!! * The horizontal Coriolis parameters (XCORIOX and XCORIOY) arrays -!! are zero-size arrays if thinshell approximation (LTHINSHELL=.TRUE.) -!! * The Curvature coefficients (XCURVX and XCURVY) arrays -!! are zero-size arrays if Cartesian geometry (LCARTESIAN=.TRUE.) -!! * Memory for the Jacobian (ZJ) local array is allocated -!! (This variable is computed in SET_GRID and used in SET_REF). -!! - The spatial and temporal grid variables are initialized by SET_GRID. -!! - The metric coefficients are computed by METRICS (they are using in -!! the SET-REF call). -!! - The prognostic variables and are read in initial -!! LFIFM file (in READ_FIELD) -!! - The reference state variables are initialized by SET_REF. -!! - The temporal indexes of the outputs are computed by SET_OUTPUT_TIMES -!! - The large scale sources are computed in case of coupling case by -!! INI_CPL. -!! - The initialization of the parameters needed for the dynamics -!! of the model n is realized in INI_DYNAMICS. -!! - Then the initial file (DESFM+LFIFM files) is closed by IO_File_close. -!! - The initialization of the parameters needed for the ECMWF radiation -!! code is realized in INI_RADIATIONS. -!! - The contents of the scalar variables are overwritten by -!! the chemistry initialization subroutine CH_INIT_FIELDn when -!! the flags LUSECHEM and LCH_INIT_FIELD are set to TRUE. -!! This allows easy initialization of the chemical fields at a -!! restart of the model. -!! -!! EXTERNAL -!! -------- -!! SET_DIM : to initialize dimensions -!! SET_GRID : to initialize grid -!! METRICS : to compute metric coefficients -!! READ_FIELD : to initialize field -!! FMCLOS : to close a FM-file -!! SET_REF : to initialize reference state for anelastic approximation -!! INI_DYNAMICS: to initialize parameters for the dynamics -!! INI_TKE_EPS : to initialize the TKE -!! SET_DIRCOS : to compute the director cosinus of the orography -!! INI_RADIATIONS : to initialize radiation computations -!! CH_INIT_CCS: to initialize the chemical core system -!! CH_INIT_FIELDn: to (re)initialize the scalar variables -!! INI_DEEP_CONVECTION : to initialize the deep convection scheme -!! CLEANLIST_ll : deaalocate a list -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! Module MODD_PARAMETERS : contains declaration of parameter variables -!! JPHEXT : Horizontal external points number -!! JPVEXT : Vertical external points number -!! -!! Module MODD_MODD_DYN : contains declaration of parameters -!! for the dynamics -!! Module MODD_CONF : contains declaration of configuration variables -!! for all models -!! NMODEL : Number of nested models -!! NVERB : Level of informations on output-listing -!! 0 for minimum prints -!! 5 for intermediate level of prints -!! 10 for maximum prints -!! -!! Module MODD_REF : contains declaration of reference state -!! variables for all models -!! Module MODD_FIELD_n : contains declaration of prognostic fields -!! Module MODD_LSFIELD_n : contains declaration of Larger Scale fields -!! Module MODD_GRID_n : contains declaration of spatial grid variables -!! Module MODD_TIME_n : contains declaration of temporal grid variables -!! Module MODD_REF_n : contains declaration of reference state -!! variables -!! Module MODD_CURVCOR_n : contains declaration of curvature and Coriolis -!! variables -!! Module MODD_BUDGET : contains declarations of the budget parameters -!! Module MODD_RADIATIONS_n:contains declaration of the variables of the -!! radiation interface scheme -!! Module MODD_STAND_ATM : contains declaration of the 5 standard -!! atmospheres used for the ECMWF-radiation code -!! Module MODD_FRC : contains declaration of the control variables -!! and of the forcing fields -!! Module MODD_CH_MNHC_n : contains the control parameters for chemistry -!! Module MODD_DEEP_CONVECTION_n: contains declaration of the variables of -!! the deep convection scheme -!! -!! -!! -!! -!! Module MODN_CONF_n : contains declaration of namelist NAM_CONFn and -!! uses module MODD_CONF_n (configuration variables) -!! Module MODN_LUNIT_n : contains declaration of namelist NAM_LUNITn and -!! uses module MODD_LUNIT_n (Logical units) -!! Module MODN_DYN_n : contains declaration of namelist NAM_DYNn and -!! uses module MODD_DYN_n (control of dynamics) -!! Module MODN_PARAM_n : contains declaration of namelist NAM_PARAMn and -!! uses module MODD_PARAM_n (control of physical -!! parameterization) -!! Module MODN_LBC_n : contains declaration of namelist NAM_LBCn and -!! uses module MODD_LBC_n (lateral boundaries) -!! Module MODN_TURB_n : contains declaration of namelist NAM_TURBn and -!! uses module MODD_TURB_n (turbulence scheme) -!! Module MODN_PARAM_RAD_n: contains declaration of namelist NAM_PARAM_RADn -!! -!! REFERENCE -!! --------- -!! Book2 of documentation (routine INI_MODEL_n) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/06/94 -!! Modification 17/10/94 (Stein) For LCORIO -!! Modification 20/10/94 (Stein) For SET_GRID and NAMOUTN -!! Modification 26/10/94 (Stein) Modifications of the namelist names -!! Modification 10/11/94 (Lafore) allocatation of tke fields -!! Modification 22/11/94 (Stein) change the READ_FIELDS call ( add -!! pressure function -!! Modification 06/12/94 (Stein) add the LS fields -!! 12/12/94 (Stein) rename END_INI in INI_DYNAMICS -!! Modification 09/01/95 (Stein) add the turbulence scheme -!! Modification Jan 19, 1995 (J. Cuxart) add the TKE initialization -!! Jan 23, 1995 (J. Stein ) remove the condition -!! LTHINSHELL=T LCARTESIAN=T => stop -!! Modification Feb 16, 1995 (I.Mallet) add the METRICS call and -!! change the SET_REF call (add -!! the lineic mass) -!! Modification Mar 10, 1995 (I. Mallet) add the COUPLING initialization -!! June 29,1995 (Ph. Hereil, J. Stein) add the budget init. -!! Modification Sept. 1, 1995 (S. Belair) Reading of the surface variables -!! and parameters for ISBA (i.e., add a -!! CALL READ_GR_FIELD) -!! Modification 18/08/95 (J.P.Lafore) time step change case -!! 25/09/95 (J. Cuxart and J.Stein) add LES variables -!! and the diachronic file initialization -!! Modification Sept 20,1995 (Lafore) coupling for the dry mass Md -!! Modification Sept. 12, 1995 (J.-P. Pinty) add the initialization of -!! the ECMWF radiation code -!! Modification Sept. 13, 1995 (J.-P. Pinty) control the allocation of the -!! arrays of MODD_GR_FIELD_n -!! Modification Nove. 17, 1995 (J.Stein) control of the control !! -!! March 01, 1996 (J. Stein) add the cloud fraction -!! April 03, 1996 (J. Stein) unify the ISBA and TSZ0 cases -!! Modification 13/12/95 (M. Georgelin) add the forcing variables in -!! the call read_field, and their -!! allocation. -!! Mai 23, 1996 (J. Stein) allocate XSEA in the TSZ0 case -!! June 11, 1996 (V. Masson) add XSILT and XLAKE of -!! MODD_GR_FIELD_n -!! August 7, 1996 (K. Suhre) add (re)initialization of -!! chemistry -!! Octo. 11, 1996 (J. Stein ) add XSRCT and XSRCM -!! October 8, 1996 (J. Cuxart, E. Sanchez) Moist LES diagnostics -!! and control on TKE initialization. -!! Modification 19/12/96 (J.-P. Pinty) add the ice parameterization and -!! the precipitation fields -!! Modification 11/01/97 (J.-P. Pinty) add the deep convection -!! Nov. 1, 1996 (V. Masson) Read the vertical grid kind -!! Nov. 20, 1996 (V. Masson) control of convection calling time -!! July 16, 1996 (J.P.Lafore) update of EXSEG file reading -!! Oct. 08, 1996 (J.P.Lafore, V.Masson) -!! MY_NAME and DAD_NAME reading and check -!! Oct. 30, 1996 (J.P.Lafore) resolution ratio reading for nesting -!! and Bikhardt interpolation coef. initialization -!! Nov. 22, 1996 (J.P.Lafore) allocation of LS sources for nesting -!! Feb. 26, 1997 (J.P.Lafore) allocation of "surfacic" LS fields -!! March 10, 1997 (J.P.Lafore) forcing only for model 1 -!! June 22, 1997 (J. Stein) add the absolute pressure -!! July 09, 1997 (V. Masson) add directional z0 and SSO -!! Aug. 18, 1997 (V. Masson) consistency between storage -!! type and CCONF -!! Dec. 22, 1997 (J. Stein) add the LS field spawning -!! Jan. 24, 1998 (P.Bechtold) change MODD_FRC and MODD_DEEP_CONVECTION -!! Dec. 24, 1997 (V.Masson) directional z0 parameters -!! Aug. 13, 1998 (V. Ducrocq P Jabouille) // -!! Mai. 26, 1998 (J. Stein) remove NXEND,NYEND -!! Feb. 1, 1999 (J. Stein) compute the Bikhardt -!! interpolation coeff. before the call to set_grid -!! April 5, 1999 (V. Ducrocq) change the DXRATIO_ALL init. -!! April 12, 1999 (J. Stein) cleaning + INI_SPAWN_LS -!! Apr. 7, 1999 (P Jabouille) store the metric coefficients -!! in modd_metrics_n -!! Jui. 15,1999 (P Jabouille) split the routines in two parts -!! Jan. 04,2000 (V. Masson) removes the TSZ0 case -!! Apr. 15,2000 (P Jabouille) parallelization of grid nesting -!! Aug. 20,2000 (J Stein ) tranpose XBFY -!! Jui 01,2000 (F.solmon ) adapatation for patch approach -!! Jun. 15,2000 (J.-P. Pinty) add C2R2 initialization -!! Nov. 15,2000 (V.Masson) use of ini_modeln in prep_real_case -!! Nov. 15,2000 (V.Masson) call of LES routines -!! Nov. 15,2000 (V.Masson) aircraft and balloon initialization routines -!! Jan. 22,2001 (D.Gazen) update_nsv set NSV_* var. for current model -!! Mar. 04,2002 (V.Ducrocq) initialization to temporal series -!! Mar. 15,2002 (F.Solmon) modification of ini_radiation interface -!! Nov. 29,2002 (JP Pinty) add C3R5, ICE2, ICE4, ELEC -!! Jan. 2004 (V.Masson) externalization of surface -!! May 2006 Remove KEPS -!! Apr. 2010 (M. Leriche) add pH for aqueous phase chemistry -!! Jul. 2010 (M. Leriche) add Ice phase chemistry -!! Oct. 2010 (J.Escobar) check if local domain not to small for NRIMX NRIMY -!! Nov. 2010 (J.Escobar) PGI BUG , add SIZE(CSV) to init_ground routine -!! Nov. 2009 (C. Barthe) add call to INI_ELEC_n -!! Mar. 2010 (M. Chong) add small ions -!! Apr. 2011 (M. Chong) correction of RESTART (ELEC) -!! June 2011 (B.Aouizerats) Prognostic aerosols -!! June 2011 (P.Aumond) Drag of the vegetation -!! + Mean fields -!! July 2013 (Bosseur & Filippi) Adds Forefire -!! P. Tulet Nov 2014 accumulated moles of aqueous species that fall at the surface -!! JAn. 2015 (F. Brosse) bug in allocate XACPRAQ -!! Dec 2014 (C.Lac) : For reproducibility START/RESTA -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! V. Masson Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions -!! J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files -!! J.Escobar : 01/06/2016 : correct check limit of NRIM versus local subdomain size IDIM -!! 06/2016 (G.Delautier) phasage surfex 8 -!! Modification 01/2016 (JP Pinty) Add LIMA -!! Aug. 2016 (J.Pianezze) Add SFX_OASIS_READ_NAM function from SurfEx -!! M.Leriche 2016 Chemistry -!! 10/2016 M.Mazoyer New KHKO output fields -!! 10/2016 (C.Lac) Add max values -!! F. Brosse Oct. 2016 add prod/loss terms computation for chemistry -!! M.Leriche 2016 Chemistry -!! M.Leriche 10/02/17 prevent negative values in LBX(Y)SVS -!! M.Leriche 01/07/2017 Add DIAG chimical surface fluxes -!! 09/2017 Q.Rodier add LTEND_UV_FRC -!! 02/2018 Q.Libois ECRAD -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! V. Vionnet : 18/07/2017 : add blowing snow scheme -!! 01/18 J.Colin Add DRAG -! P. Wautelet 29/01/2019: bug: add missing zero-size allocations -! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list -! P. Wautelet 13/02/2019: initialize XALBUV even if no radiation (needed in CH_INTERP_JVALUES) -! P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments of READ_FIELD -! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables -! P. Wautelet 14/02/2019: remove HINIFILE dummy argument from INI_RADIATIONS_ECMWF/ECRAD -!! 02/2019 C.Lac add rain fraction as an output field -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -! P. Wautelet 14/03/2019: correct ZWS when variable not present in file (set to XZWS_DEFAULT) -! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg -! P. Wautelet 19/04/2019: removed unused dummy arguments and variables -! P. Wautelet 07/06/2019: allocate lookup tables for optical properties only when needed -! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management -! C. Lac 11/2019: correction in the drag formula and application to building in addition to tree -! S. Riette 04/2020: XHL* fields -! F. Auguste 02/2021: add IBM -! T.Nigel 02/2021: add turbulence recycling -! J.L.Redelsperger 06/2011: OCEAN case -!--------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -#ifdef MNH_ECRAD -USE YOERDI, only: RCCO2 -#endif - -USE MODD_2D_FRC -USE MODD_ADVFRC_n -USE MODD_ADV_n -use MODD_AEROSET, only: POLYTAU, POLYSSA, POLYG -USE MODD_ARGSLIST_ll, only: LIST_ll -USE MODD_BIKHARDT_n -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n -USE MODD_BUDGET -USE MODD_CH_AERO_n, only: XSOLORG,XMI -USE MODD_CH_AEROSOL, only: LORILAM -USE MODD_CH_BUDGET_n -USE MODD_CH_FLX_n, only: XCHFLX -USE MODD_CH_M9_n, only:NNONZEROTERMS -USE MODD_CH_MNHC_n, only: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, & - LCH_CONV_LINOX, XCH_TUV_DOBNEW, LCH_PH -USE MODD_CH_PH_n -USE MODD_CH_PRODLOSSTOT_n -USE MODD_CLOUD_MF_n -USE MODD_CONF -USE MODD_CONF_n -USE MODD_CST -USE MODD_CTURB -USE MODD_CURVCOR_n -USE MODD_DEEP_CONVECTION_n -USE MODD_DEF_EDDY_FLUX_n ! for VT and WT fluxes -USE MODD_DEF_EDDYUV_FLUX_n ! FOR UV -USE MODD_DIAG_FLAG, only: LCHEMDIAG, CSPEC_BU_DIAG -USE MODD_DIM_n -USE MODD_DRAG_n -USE MODD_DRAGTREE_n -USE MODD_DUST -use MODD_DUST_OPT_LKT, only: NMAX_RADIUS_LKT_DUST=>NMAX_RADIUS_LKT, NMAX_SIGMA_LKT_DUST=>NMAX_SIGMA_LKT, & - NMAX_WVL_SW_DUST=>NMAX_WVL_SW, & - XEXT_COEFF_WVL_LKT_DUST=>XEXT_COEFF_WVL_LKT, XEXT_COEFF_550_LKT_DUST=>XEXT_COEFF_550_LKT, & - XPIZA_LKT_DUST=>XPIZA_LKT, XCGA_LKT_DUST=>XCGA_LKT -USE MODD_DYN -USE MODD_DYN_n -USE MODD_DYNZD -USE MODD_DYNZD_n -USE MODD_ELEC_n, only: XCION_POS_FW, XCION_NEG_FW -USE MODD_EOL_MAIN -USE MODD_FIELD_n -#ifdef MNH_FOREFIRE -USE MODD_FOREFIRE -USE MODD_FOREFIRE_n -#endif -USE MODD_FRC -USE MODD_FRC_n -USE MODD_GET_n -USE MODD_GRID_n -USE MODD_GRID, only: XLONORI,XLATORI -USE MODD_IBM_PARAM_n, only: LIBM, XIBM_IEPS, XIBM_LS, XIBM_XMUT -USE MODD_IO, only: CIO_DIR, TFILEDATA, TFILE_DUMMY -USE MODD_IO_SURF_MNH, only: IO_SURF_MNH_MODEL -USE MODD_LATZ_EDFLX -USE MODD_LBC_n, only: CLBCX, CLBCY -use modd_les -USE MODD_LSFIELD_n -USE MODD_LUNIT_n -USE MODD_MEAN_FIELD -USE MODD_MEAN_FIELD_n -USE MODD_METRICS_n -USE MODD_MNH_SURFEX_n -USE MODD_NESTING, only: CDAD_NAME, NDAD, NDT_2_WAY, NDTRATIO, NDXRATIO_ALL, NDYRATIO_ALL -USE MODD_NSV -USE MODD_NSV -USE MODD_NUDGING_n, only: LNUDGING -USE MODD_OCEANH -USE MODD_OUT_n -USE MODD_PARAMETERS -USE MODD_PARAM_KAFR_n -USE MODD_PARAM_MFSHALL_n -USE MODD_PARAM_n -USE MODD_PARAM_RAD_n, only: CAER, CAOP, CLW -USE MODD_PASPOL -USE MODD_PASPOL_n -USE MODD_PAST_FIELD_n -use modd_precision, only: LFIINT -USE MODD_RADIATIONS_n -USE MODD_RECYCL_PARAM_n -USE MODD_REF -USE MODD_REF_n -USE MODD_RELFRC_n -use MODD_SALT, only: LSALT -use MODD_SALT_OPT_LKT, only: NMAX_RADIUS_LKT_SALT=>NMAX_RADIUS_LKT, NMAX_SIGMA_LKT_SALT=>NMAX_SIGMA_LKT, & - NMAX_WVL_SW_SALT=>NMAX_WVL_SW, & - XEXT_COEFF_WVL_LKT_SALT=>XEXT_COEFF_WVL_LKT, XEXT_COEFF_550_LKT_SALT=>XEXT_COEFF_550_LKT, & - XPIZA_LKT_SALT=>XPIZA_LKT, XCGA_LKT_SALT=>XCGA_LKT -USE MODD_SERIES, only: LSERIES -USE MODD_SHADOWS_n -USE MODD_STAND_ATM, only: XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM -USE MODD_TIME -USE MODD_TIME_n -USE MODD_TURB_CLOUD, only: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI -USE MODD_TURB_n -USE MODD_VAR_ll, only: IP - -USE MODE_GATHER_ll -use mode_ini_budget, only: Budget_preallocate, Ini_budget -USE MODE_INI_ONE_WAY_n -USE MODE_IO -USE MODE_IO_FIELD_READ, only: IO_Field_read -USE MODE_IO_FILE, only: IO_File_open -USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list -USE MODE_ll -USE MODE_MODELN_HANDLER -USE MODE_MPPDB -USE MODE_MSG -USE MODE_SPLITTINGZ_ll, only: GET_DIM_EXTZ_ll -USE MODE_TYPE_ZDIFFU - -USE MODI_CH_AER_MOD_INIT -USE MODI_CH_INIT_BUDGET_n -USE MODI_CH_INIT_FIELD_n -USE MODI_CH_INIT_JVALUES -USE MODI_CH_INIT_PRODLOSSTOT_n -USE MODI_GET_SIZEX_LB -USE MODI_GET_SIZEY_LB -USE MODI_INI_AEROSET1 -USE MODI_INI_AEROSET2 -USE MODI_INI_AEROSET3 -USE MODI_INI_AEROSET4 -USE MODI_INI_AEROSET5 -USE MODI_INI_AEROSET6 -USE MODI_INI_AIRCRAFT_BALLOON -USE MODI_INI_AIRCRAFT_BALLOON -USE MODI_INI_BIKHARDT_n -USE MODI_INI_CPL -USE MODI_INI_DEEP_CONVECTION -USE MODI_INI_DRAG -USE MODI_INI_DYNAMICS -USE MODI_INI_ELEC_n -USE MODI_INI_EOL_ADNR -USE MODI_INI_EOL_ALM -USE MODI_INI_LES_N -USE MODI_INI_LG -USE MODI_INI_LW_SETUP -USE MODI_INI_MICRO_n -USE MODI_INI_POSPROFILER_n -USE MODI_INI_RADIATIONS -USE MODI_INI_RADIATIONS_ECMWF -USE MODI_INI_RADIATIONS_ECRAD -USE MODI_INI_SERIES_N -USE MODI_INI_SPAWN_LS_n -USE MODI_INI_SURF_RAD -USE MODI_INI_SURFSTATION_n -USE MODI_INI_SW_SETUP -USE MODI_INIT_AEROSOL_PROPERTIES -#ifdef MNH_FOREFIRE -USE MODI_INIT_FOREFIRE_n -#endif -USE MODI_INIT_GROUND_PARAM_n -USE MODI_INI_TKE_EPS -USE MODI_METRICS -USE MODI_MNHGET_SURF_PARAM_n -USE MODI_MNHREAD_ZS_DUMMY_n -USE MODI_READ_FIELD -USE MODI_SET_DIRCOS -USE MODI_SET_GRID -USE MODI_SET_REF -#ifdef CPLOASIS -USE MODI_SFX_OASIS_READ_NAM -#endif -USE MODI_SUNPOS_n -USE MODI_SURF_SOLAR_GEOM -USE MODI_UPDATE_METRICS -USE MODI_UPDATE_NSV -#ifdef MNH_ECRAD -#if ( VER_ECRAD == 140 ) -USE YOERDI , ONLY :RCCO2 -#endif -#endif -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -INTEGER, INTENT(IN) :: KMI ! Model Index -TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file -! -!* 0.2 declarations of local variables -! -REAL, PARAMETER :: NALBUV_DEFAULT = 0.01 ! Arbitrary low value for XALBUV -! -INTEGER :: JSV ! Loop index -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ILUOUT ! Logical unit number of output-listing -CHARACTER(LEN=28) :: YNAME -INTEGER :: IIU ! Upper dimension in x direction (local) -INTEGER :: IJU ! Upper dimension in y direction (local) -INTEGER :: IIU_ll ! Upper dimension in x direction (global) -INTEGER :: IJU_ll ! Upper dimension in y direction (global) -INTEGER :: IKU ! Upper dimension in z direction -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! Jacobian -LOGICAL :: GINIDCONV ! logical switch for the deep convection - ! initialization -LOGICAL :: GINIRAD ! logical switch for the radiation - ! initialization -logical :: gles ! Logical to determine if LES diagnostics are enabled -! -! -TYPE(LIST_ll), POINTER :: TZINITHALO2D_ll ! pointer for the list of 2D fields - ! which must be communicated in INIT -TYPE(LIST_ll), POINTER :: TZINITHALO3D_ll ! pointer for the list of 3D fields - ! which must be communicated in INIT -! -INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU ! dimensions of the -INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2 ! West-east LB arrays -INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the -INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays -INTEGER :: IINFO_ll ! Return code of //routines -INTEGER :: IIY,IJY -INTEGER :: IIU_B,IJU_B -INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZCO2 ! CO2 concentration near the surface -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSEA ! sea fraction -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTOWN ! town fraction -REAL, DIMENSION(:,:), ALLOCATABLE :: ZBARE ! bare soil fraction -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEMIS ! emissivity -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTSRAD ! surface temperature -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZIBM_LS ! LevelSet IBM -! -! -INTEGER, DIMENSION(:,:),ALLOCATABLE :: IINDEX ! indices of non-zero terms -INTEGER, DIMENSION(:),ALLOCATABLE :: IIND -INTEGER :: JM, JT -! -!------------------------------------------ -! Dummy pointers needed to correct an ifort Bug -REAL, DIMENSION(:), POINTER :: DPTR_XZHAT -REAL, DIMENSION(:), POINTER :: DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4 -REAL, DIMENSION(:), POINTER :: DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4 -REAL, DIMENSION(:), POINTER :: DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4 -REAL, DIMENSION(:), POINTER :: DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4 -CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY -INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_NKLIN_LBXV,DPTR_NKLIN_LBYV -INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_NKLIN_LBXM,DPTR_NKLIN_LBYM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXU,DPTR_XCOEFLIN_LBYU -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXV,DPTR_XCOEFLIN_LBYV -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXW,DPTR_XCOEFLIN_LBYW -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXM,DPTR_XCOEFLIN_LBYM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXWM,DPTR_XLBYWM,DPTR_XLBXTHM,DPTR_XLBYTHM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXTKEM,DPTR_XLBYTKEM -REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXSVM,DPTR_XLBYSVM -REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XZZ -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS -REAL, DIMENSION(:,:), POINTER :: DPTR_XLSZWSM,DPTR_XLSZWSS -! -INTEGER :: IIB,IJB,IIE,IJE,IDIMX,IDIMY,IMI -! -!------------------------------------------------------------------------------- -! -!* 0. PROLOGUE -! -------- -! Compute relaxation coefficients without changing INI_DYNAMICS nor RELAXDEF -! -IF (CCLOUD == 'LIMA') THEN - LHORELAX_SVC1R3=LHORELAX_SVLIMA -END IF -! -! UPDATE CONSTANTS FOR OCEAN MODEL -IF (LOCEAN) THEN - XP00=XP00OCEAN - XTH00=XTH00OCEAN -END IF -! -! -NULLIFY(TZINITHALO2D_ll) -NULLIFY(TZINITHALO3D_ll) -! -!* 1. RETRIEVE LOGICAL UNIT NUMBER -! ---------------------------- -! -ILUOUT = TLUOUT%NLU -! -!------------------------------------------------------------------------------- -! -!* 2. END OF READING -! -------------- -!* 2.1 Read number of forcing fields -! -IF (LFORCING) THEN ! Retrieve the number of time-dependent forcings. - CALL IO_Field_read(TPINIFILE,'FRC',NFRC,IRESP) - IF ( (IRESP /= 0) .OR. (NFRC <=0) ) THEN - WRITE(ILUOUT,'(A/A)') & - "INI_MODEL_n ERROR: you want to read forcing variables from FMfile", & - " but no fields have been found by IO_Field_read" -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') - END IF -END IF -! -! Modif PP for time evolving adv forcing - IF ( L2D_ADV_FRC ) THEN ! Retrieve the number of time-dependent forcings. - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER ADV_FORCING" - CALL IO_Field_read(TPINIFILE,'NADVFRC1',NADVFRC,IRESP) - IF ( (IRESP /= 0) .OR. (NADVFRC <=0) ) THEN - WRITE(ILUOUT,'(A/A)') & - "INI_MODELn ERROR: you want to read forcing ADV variables from FMfile", & - " but no fields have been found by IO_Field_read" - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') - END IF - WRITE(ILUOUT,*) 'NADVFRC = ', NADVFRC -END IF -! -IF ( L2D_REL_FRC ) THEN ! Retrieve the number of time-dependent forcings. - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER REL_FORCING" - CALL IO_Field_read(TPINIFILE,'NRELFRC1',NRELFRC,IRESP) - IF ( (IRESP /= 0) .OR. (NRELFRC <=0) ) THEN - WRITE(ILUOUT,'(A/A)') & - "INI_MODELn ERROR: you want to read forcing REL variables from FMfile", & - " but no fields have been found by IO_Field_read" - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') - END IF - WRITE(ILUOUT,*) 'NRELFRC = ', NRELFRC -END IF -!* 2.2 Checks the position of vertical absorbing layer -! -IKU=NKMAX+2*JPVEXT -! -ALLOCATE(XZHAT(IKU)) -CALL IO_Field_read(TPINIFILE,'ZHAT',XZHAT) -CALL IO_Field_read(TPINIFILE,'ZTOP',XZTOP) -IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR: you want to use vertical relaxation" - WRITE(ILUOUT,FMT=*) " but bottom of layer XALZBOT(",XALZBOT,")" - WRITE(ILUOUT,FMT=*) " is upper than model top (",XZHAT(IKU),")" -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') -END IF -IF (LVE_RELAX) THEN - IF (XALZBOT>=XZHAT(IKU-4) ) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n WARNING: you want to use vertical relaxation" - WRITE(ILUOUT,FMT=*) " but the layer defined by XALZBOT(",XALZBOT,")" - WRITE(ILUOUT,FMT=*) " contains less than 5 model levels" - END IF -END IF -DEALLOCATE(XZHAT) -! -!* 2.3 Compute sizes of arrays of the extended sub-domain -! -CALL GET_DIM_EXT_ll('B',IIU,IJU) -IIU_ll=NIMAX_ll + 2 * JPHEXT -IJU_ll=NJMAX_ll + 2 * JPHEXT -! initialize NIMAX and NJMAX for not updated versions regarding the parallelism -! spawning,... -CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) -! -CALL GET_INDICE_ll( IIB,IJB,IIE,IJE) -IDIMX = IIE - IIB + 1 -IDIMY = IJE - IJB + 1 -! -NRR=0 -NRRL=0 -NRRI=0 -IF (CGETRVT /= 'SKIP' ) THEN - NRR = NRR+1 - IDX_RVT = NRR -END IF -IF (CGETRCT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRL = NRRL+1 - IDX_RCT = NRR -END IF -IF (CGETRRT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRL = NRRL+1 - IDX_RRT = NRR -END IF -IF (CGETRIT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 - IDX_RIT = NRR -END IF -IF (CGETRST /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 - IDX_RST = NRR -END IF -IF (CGETRGT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 - IDX_RGT = NRR -END IF -IF (CGETRHT /= 'SKIP' ) THEN - NRR = NRR+1 - NRRI = NRRI+1 - IDX_RHT = NRR -END IF -IF (NVERB >= 5) THEN - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," WATER VARIABLES")') NRR - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," LIQUID VARIABLES")') NRRL - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," SOLID VARIABLES")') NRRI -END IF -! -!* 2.4 Update NSV and floating indices for the current model -! -! -CALL UPDATE_NSV(KMI) -! -!------------------------------------------------------------------------------- -! -!* 3. ALLOCATE MEMORY -! ----------------- -! * Module RECYCL -! -IF (LRECYCL) THEN -! - NR_COUNT = 0 -! - ALLOCATE(XUMEANW(IJU,IKU,INT(XNUMBELT))) ; XUMEANW = 0.0 - ALLOCATE(XVMEANW(IJU,IKU,INT(XNUMBELT))) ; XVMEANW = 0.0 - ALLOCATE(XWMEANW(IJU,IKU,INT(XNUMBELT))) ; XWMEANW = 0.0 - ALLOCATE(XUMEANN(IIU,IKU,INT(XNUMBELT))) ; XUMEANN = 0.0 - ALLOCATE(XVMEANN(IIU,IKU,INT(XNUMBELT))) ; XVMEANN = 0.0 - ALLOCATE(XWMEANN(IIU,IKU,INT(XNUMBELT))) ; XWMEANN = 0.0 - ALLOCATE(XUMEANE(IJU,IKU,INT(XNUMBELT))) ; XUMEANE = 0.0 - ALLOCATE(XVMEANE(IJU,IKU,INT(XNUMBELT))) ; XVMEANE = 0.0 - ALLOCATE(XWMEANE(IJU,IKU,INT(XNUMBELT))) ; XWMEANE = 0.0 - ALLOCATE(XUMEANS(IIU,IKU,INT(XNUMBELT))) ; XUMEANS = 0.0 - ALLOCATE(XVMEANS(IIU,IKU,INT(XNUMBELT))) ; XVMEANS = 0.0 - ALLOCATE(XWMEANS(IIU,IKU,INT(XNUMBELT))) ; XWMEANS = 0.0 - ALLOCATE(XTBV(IIU,IJU,IKU)) ; XTBV = 0.0 -ELSE - ALLOCATE(XUMEANW(0,0,0)) - ALLOCATE(XVMEANW(0,0,0)) - ALLOCATE(XWMEANW(0,0,0)) - ALLOCATE(XUMEANN(0,0,0)) - ALLOCATE(XVMEANN(0,0,0)) - ALLOCATE(XWMEANN(0,0,0)) - ALLOCATE(XUMEANE(0,0,0)) - ALLOCATE(XVMEANE(0,0,0)) - ALLOCATE(XWMEANE(0,0,0)) - ALLOCATE(XUMEANS(0,0,0)) - ALLOCATE(XVMEANS(0,0,0)) - ALLOCATE(XWMEANS(0,0,0)) - ALLOCATE(XTBV (0,0,0)) -END IF -! -! -!* 3.1 Module MODD_FIELD_n -! -IF (LMEAN_FIELD) THEN -! - MEAN_COUNT = 0 -! - ALLOCATE(XUM_MEAN(IIU,IJU,IKU)) ; XUM_MEAN = 0.0 - ALLOCATE(XVM_MEAN(IIU,IJU,IKU)) ; XVM_MEAN = 0.0 - ALLOCATE(XWM_MEAN(IIU,IJU,IKU)) ; XWM_MEAN = 0.0 - ALLOCATE(XTHM_MEAN(IIU,IJU,IKU)) ; XTHM_MEAN = 0.0 - ALLOCATE(XTEMPM_MEAN(IIU,IJU,IKU)) ; XTEMPM_MEAN = 0.0 - ALLOCATE(XSVT_MEAN(IIU,IJU,IKU)) ; XSVT_MEAN = 0.0 - IF (CTURB/='NONE') THEN - ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU)) - XTKEM_MEAN = 0.0 - ELSE - ALLOCATE(XTKEM_MEAN(0,0,0)) - END IF - ALLOCATE(XPABSM_MEAN(IIU,IJU,IKU)) ; XPABSM_MEAN = 0.0 -! - ALLOCATE(XU2_MEAN(IIU,IJU,IKU)) ; XU2_MEAN = 0.0 - ALLOCATE(XV2_MEAN(IIU,IJU,IKU)) ; XV2_MEAN = 0.0 - ALLOCATE(XW2_MEAN(IIU,IJU,IKU)) ; XW2_MEAN = 0.0 - ALLOCATE(XUW_MEAN(IIU,IJU,IKU)) ; XUW_MEAN = 0.0 - ALLOCATE(XTH2_MEAN(IIU,IJU,IKU)) ; XTH2_MEAN = 0.0 - ALLOCATE(XTEMP2_MEAN(IIU,IJU,IKU)) ; XTEMP2_MEAN = 0.0 - ALLOCATE(XPABS2_MEAN(IIU,IJU,IKU)) ; XPABS2_MEAN = 0.0 -! - ALLOCATE(XUM_MAX(IIU,IJU,IKU)) ; XUM_MAX = -1.E20 - ALLOCATE(XVM_MAX(IIU,IJU,IKU)) ; XVM_MAX = -1.E20 - ALLOCATE(XWM_MAX(IIU,IJU,IKU)) ; XWM_MAX = -1.E20 - ALLOCATE(XTHM_MAX(IIU,IJU,IKU)) ; XTHM_MAX = 0.0 - ALLOCATE(XTEMPM_MAX(IIU,IJU,IKU)) ; XTEMPM_MAX = 0.0 - IF (CTURB/='NONE') THEN - ALLOCATE(XTKEM_MAX(IIU,IJU,IKU)) - XTKEM_MAX = 0.0 - ELSE - ALLOCATE(XTKEM_MAX(0,0,0)) - END IF - ALLOCATE(XPABSM_MAX(IIU,IJU,IKU)) ; XPABSM_MAX = 0.0 -ELSE - ALLOCATE(XUM_MEAN(0,0,0)) - ALLOCATE(XVM_MEAN(0,0,0)) - ALLOCATE(XWM_MEAN(0,0,0)) - ALLOCATE(XTHM_MEAN(0,0,0)) - ALLOCATE(XTEMPM_MEAN(0,0,0)) - ALLOCATE(XSVT_MEAN(0,0,0)) - ALLOCATE(XTKEM_MEAN(0,0,0)) - ALLOCATE(XPABSM_MEAN(0,0,0)) -! - ALLOCATE(XU2_MEAN(0,0,0)) - ALLOCATE(XV2_MEAN(0,0,0)) - ALLOCATE(XW2_MEAN(0,0,0)) - ALLOCATE(XUW_MEAN(0,0,0)) - ALLOCATE(XTH2_MEAN(0,0,0)) - ALLOCATE(XTEMP2_MEAN(0,0,0)) - ALLOCATE(XPABS2_MEAN(0,0,0)) -! - ALLOCATE(XUM_MAX(0,0,0)) - ALLOCATE(XVM_MAX(0,0,0)) - ALLOCATE(XWM_MAX(0,0,0)) - ALLOCATE(XTHM_MAX(0,0,0)) - ALLOCATE(XTEMPM_MAX(0,0,0)) - ALLOCATE(XTKEM_MAX(0,0,0)) - ALLOCATE(XPABSM_MAX(0,0,0)) -END IF -! -IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN - ALLOCATE(XUM(IIU,IJU,IKU)) - ALLOCATE(XVM(IIU,IJU,IKU)) - ALLOCATE(XWM(IIU,IJU,IKU)) - ALLOCATE(XDUM(IIU,IJU,IKU)) - ALLOCATE(XDVM(IIU,IJU,IKU)) - ALLOCATE(XDWM(IIU,IJU,IKU)) - IF (CCONF == 'START') THEN - XUM = 0.0 - XVM = 0.0 - XWM = 0.0 - XDUM = 0.0 - XDVM = 0.0 - XDWM = 0.0 - END IF -ELSE - ALLOCATE(XUM(0,0,0)) - ALLOCATE(XVM(0,0,0)) - ALLOCATE(XWM(0,0,0)) - ALLOCATE(XDUM(0,0,0)) - ALLOCATE(XDVM(0,0,0)) - ALLOCATE(XDWM(0,0,0)) -END IF -! -ALLOCATE(XUT(IIU,IJU,IKU)) ; XUT = 0.0 -ALLOCATE(XVT(IIU,IJU,IKU)) ; XVT = 0.0 -ALLOCATE(XWT(IIU,IJU,IKU)) ; XWT = 0.0 -ALLOCATE(XTHT(IIU,IJU,IKU)) ; XTHT = 0.0 -!$acc enter data copyin(XTHT) -ALLOCATE(XRUS(IIU,IJU,IKU)) ; XRUS = 0.0 -ALLOCATE(XRVS(IIU,IJU,IKU)) ; XRVS = 0.0 -ALLOCATE(XRWS(IIU,IJU,IKU)) ; XRWS = 0.0 -!$acc enter data copyin(XRUS,XRVS,XRWS) -ALLOCATE(XRUS_PRES(IIU,IJU,IKU)); XRUS_PRES = 0.0 -ALLOCATE(XRVS_PRES(IIU,IJU,IKU)); XRVS_PRES = 0.0 -ALLOCATE(XRWS_PRES(IIU,IJU,IKU)); XRWS_PRES = 0.0 -ALLOCATE(XRTHS(IIU,IJU,IKU)) ; XRTHS = 0.0 -!$acc enter data copyin(XRTHS) -ALLOCATE(XRTHS_CLD(IIU,IJU,IKU)); XRTHS_CLD = 0.0 - -IF ( LIBM ) THEN - ALLOCATE(ZIBM_LS(IIU,IJU,IKU)) ; ZIBM_LS = 0.0 - ALLOCATE(XIBM_XMUT(IIU,IJU,IKU)); XIBM_XMUT = 0.0 -ELSE - ALLOCATE(ZIBM_LS (0,0,0)) - ALLOCATE(XIBM_XMUT(0,0,0)) -END IF - -IF ( LRECYCL ) THEN - ALLOCATE(XFLUCTUNW(IJU,IKU)) ; XFLUCTUNW = 0.0 - ALLOCATE(XFLUCTVNN(IIU,IKU)) ; XFLUCTVNN = 0.0 - ALLOCATE(XFLUCTUTN(IIU,IKU)) ; XFLUCTUTN = 0.0 - ALLOCATE(XFLUCTVTW(IJU,IKU)) ; XFLUCTVTW = 0.0 - ALLOCATE(XFLUCTUNE(IJU,IKU)) ; XFLUCTUNE = 0.0 - ALLOCATE(XFLUCTVNS(IIU,IKU)) ; XFLUCTVNS = 0.0 - ALLOCATE(XFLUCTUTS(IIU,IKU)) ; XFLUCTUTS = 0.0 - ALLOCATE(XFLUCTVTE(IJU,IKU)) ; XFLUCTVTE = 0.0 - ALLOCATE(XFLUCTWTW(IJU,IKU)) ; XFLUCTWTW = 0.0 - ALLOCATE(XFLUCTWTN(IIU,IKU)) ; XFLUCTWTN = 0.0 - ALLOCATE(XFLUCTWTE(IJU,IKU)) ; XFLUCTWTE = 0.0 - ALLOCATE(XFLUCTWTS(IIU,IKU)) ; XFLUCTWTS = 0.0 -ELSE - ALLOCATE(XFLUCTUNW(0,0)) - ALLOCATE(XFLUCTVNN(0,0)) - ALLOCATE(XFLUCTUTN(0,0)) - ALLOCATE(XFLUCTVTW(0,0)) - ALLOCATE(XFLUCTUNE(0,0)) - ALLOCATE(XFLUCTVNS(0,0)) - ALLOCATE(XFLUCTUTS(0,0)) - ALLOCATE(XFLUCTVTE(0,0)) - ALLOCATE(XFLUCTWTW(0,0)) - ALLOCATE(XFLUCTWTN(0,0)) - ALLOCATE(XFLUCTWTE(0,0)) - ALLOCATE(XFLUCTWTS(0,0)) -END IF -! -IF (CTURB /= 'NONE') THEN - ALLOCATE(XTKET(IIU,IJU,IKU)) - ALLOCATE(XRTKES(IIU,IJU,IKU)) - ALLOCATE(XRTKEMS(IIU,IJU,IKU)); XRTKEMS = 0.0 - ALLOCATE(XWTHVMF(IIU,IJU,IKU)) - ALLOCATE(XDYP(IIU,IJU,IKU)) - ALLOCATE(XTHP(IIU,IJU,IKU)) - ALLOCATE(XTR(IIU,IJU,IKU)) - ALLOCATE(XDISS(IIU,IJU,IKU)) - ALLOCATE(XLEM(IIU,IJU,IKU)) - XTKEMIN=XKEMIN - XCED =XCEDIS -ELSE - ALLOCATE(XTKET(0,0,0)) - ALLOCATE(XRTKES(0,0,0)) - ALLOCATE(XRTKEMS(0,0,0)) - ALLOCATE(XWTHVMF(0,0,0)) - ALLOCATE(XDYP(0,0,0)) - ALLOCATE(XTHP(0,0,0)) - ALLOCATE(XTR(0,0,0)) - ALLOCATE(XDISS(0,0,0)) - ALLOCATE(XLEM(0,0,0)) -END IF -IF (CTOM == 'TM06') THEN - ALLOCATE(XBL_DEPTH(IIU,IJU)) -ELSE - ALLOCATE(XBL_DEPTH(0,0)) -END IF -IF (LRMC01) THEN - ALLOCATE(XSBL_DEPTH(IIU,IJU)) -ELSE - ALLOCATE(XSBL_DEPTH(0,0)) -END IF -! -ALLOCATE(XPABSM(IIU,IJU,IKU)) ; XPABSM = 0.0 -ALLOCATE(XPABST(IIU,IJU,IKU)) ; XPABST = 0.0 -!$acc enter data copyin(XPABST) -! -ALLOCATE(XRT(IIU,IJU,IKU,NRR)) ; XRT = 0.0 - -ALLOCATE(XRRS(IIU,IJU,IKU,NRR)) ; XRRS = 0.0 -ALLOCATE(XRRS_CLD(IIU,IJU,IKU,NRR)); XRRS_CLD = 0.0 -! -IF (CTURB /= 'NONE' .AND. NRR>1) THEN - ALLOCATE(XSRCT(IIU,IJU,IKU)) - ALLOCATE(XSIGS(IIU,IJU,IKU)) -ELSE - ALLOCATE(XSRCT(0,0,0)) - ALLOCATE(XSIGS(0,0,0)) -END IF -IF (CCLOUD == 'ICE3'.OR.CCLOUD == 'ICE4') THEN - ALLOCATE(XHLC_HRC(IIU,IJU,IKU)) - ALLOCATE(XHLC_HCF(IIU,IJU,IKU)) - ALLOCATE(XHLI_HRI(IIU,IJU,IKU)) - ALLOCATE(XHLI_HCF(IIU,IJU,IKU)) - XHLC_HRC(:,:,:)=0. - XHLC_HCF(:,:,:)=0. - XHLI_HRI(:,:,:)=0. - XHLI_HCF(:,:,:)=0. -ELSE - ALLOCATE(XHLC_HRC(0,0,0)) - ALLOCATE(XHLC_HCF(0,0,0)) - ALLOCATE(XHLI_HRI(0,0,0)) - ALLOCATE(XHLI_HCF(0,0,0)) -END IF -! -IF (NRR>1) THEN - ALLOCATE(XCLDFR(IIU,IJU,IKU)); XCLDFR (:, :, :) = 0. - ALLOCATE(XRAINFR(IIU,IJU,IKU)); XRAINFR(:, :, :) = 0. -ELSE - ALLOCATE(XCLDFR(0,0,0)) - ALLOCATE(XRAINFR(0,0,0)) -END IF -! -ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ; XSVT = 0. -ALLOCATE(XRSVS(IIU,IJU,IKU,NSV)); XRSVS = 0. -ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0 -ALLOCATE(XZWS(IIU,IJU)) ; XZWS(:,:) = XZWS_DEFAULT -! -IF (LPASPOL) THEN - ALLOCATE( XATC(IIU,IJU,IKU,NSV_PP) ) - XATC = 0. -ELSE - ALLOCATE( XATC(0,0,0,0)) -END IF -! -IF(LBLOWSNOW) THEN - ALLOCATE(XSNWCANO(IIU,IJU,NBLOWSNOW_2D)) - ALLOCATE(XRSNWCANOS(IIU,IJU,NBLOWSNOW_2D)) - XSNWCANO(:,:,:) = 0.0 - XRSNWCANOS(:,:,:) = 0.0 -ELSE - ALLOCATE(XSNWCANO(0,0,0)) - ALLOCATE(XRSNWCANOS(0,0,0)) -END IF -! -!* 3.2 Module MODD_GRID_n and MODD_METRICS_n -! -IF (LCARTESIAN) THEN - ALLOCATE(XLON(0,0)) - ALLOCATE(XLAT(0,0)) - ALLOCATE(XMAP(0,0)) -ELSE - ALLOCATE(XLON(IIU,IJU)) - ALLOCATE(XLAT(IIU,IJU)) - ALLOCATE(XMAP(IIU,IJU)) -END IF -ALLOCATE(XXHAT(IIU)) -ALLOCATE(XDXHAT(IIU)) -ALLOCATE(XYHAT(IJU)) -ALLOCATE(XDYHAT(IJU)) -ALLOCATE(XZS(IIU,IJU)) -ALLOCATE(XZSMT(IIU,IJU)) -ALLOCATE(XZZ(IIU,IJU,IKU)) -ALLOCATE(XZHAT(IKU)) -ALLOCATE(XDIRCOSZW(IIU,IJU)) -ALLOCATE(XDIRCOSXW(IIU,IJU)) -ALLOCATE(XDIRCOSYW(IIU,IJU)) -ALLOCATE(XCOSSLOPE(IIU,IJU)) -ALLOCATE(XSINSLOPE(IIU,IJU)) -! -ALLOCATE(XDXX(IIU,IJU,IKU)) -ALLOCATE(XDYY(IIU,IJU,IKU)) -ALLOCATE(XDZX(IIU,IJU,IKU)) -ALLOCATE(XDZY(IIU,IJU,IKU)) -ALLOCATE(XDZZ(IIU,IJU,IKU)) -!$acc enter data create(XDXX,XDYY,XDZZ,XDZX,XDZY) -! -!* 3.3 Modules MODD_REF and MODD_REF_n -! -! Different reference states for Ocean and Atmosphere models -! For the moment, same reference states for O and A -!IF ((KMI == 1).OR.LCOUPLES) THEN -IF (KMI==1) THEN - ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU)) -ELSE IF (LCOUPLES) THEN -! in coupled O-A case, need different variables for ocean - ALLOCATE(XRHODREFZO(IKU),XTHVREFZO(IKU)) -ELSE - !Do not allocate XRHODREFZ and XTHVREFZ because they are the same on all grids (not 'n' variables) -END IF -! -ALLOCATE(XPHIT(IIU,IJU,IKU)) -ALLOCATE(XRHODREF(IIU,IJU,IKU)) -ALLOCATE(XTHVREF(IIU,IJU,IKU)) -ALLOCATE(XEXNREF(IIU,IJU,IKU)) -ALLOCATE(XRHODJ(IIU,IJU,IKU)) -!$acc enter data create(XRHODREF,XEXNREF,XTHVREF,XRHODJ) -IF (CEQNSYS=='DUR' .AND. LUSERV) THEN - ALLOCATE(XRVREF(IIU,IJU,IKU)) -ELSE - ALLOCATE(XRVREF(0,0,0)) -END IF -!$acc enter data create(XRVREF) -! -!* 3.4 Module MODD_CURVCOR_n -! -IF (LTHINSHELL) THEN - ALLOCATE(XCORIOX(0,0)) - ALLOCATE(XCORIOY(0,0)) -ELSE - ALLOCATE(XCORIOX(IIU,IJU)) - ALLOCATE(XCORIOY(IIU,IJU)) -END IF - ALLOCATE(XCORIOZ(IIU,IJU)) -IF (LCARTESIAN) THEN - ALLOCATE(XCURVX(0,0)) - ALLOCATE(XCURVY(0,0)) -ELSE - ALLOCATE(XCURVX(IIU,IJU)) - ALLOCATE(XCURVY(IIU,IJU)) -END IF -! -!* 3.5 Module MODD_DYN_n -! -CALL GET_DIM_EXT_ll('Y',IIY,IJY) -IF (L2D) THEN - ALLOCATE(XBFY(IIY,IJY,IKU)) -ELSE - ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisation of the - ! FFT solver -END IF -CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) -ALLOCATE(XBFB(IIU_B,IJU_B,IKU)) -ALLOCATE(XAF_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(XBF_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(XCF_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(XDXATH_ZS(IIU_B,IJU_B)) -ALLOCATE(XDYATH_ZS(IIU_B,IJU_B)) -ALLOCATE(XRHO_ZS(IIU_B,IJU_B,IKU)) -ALLOCATE(XA_K(IKU)) -ALLOCATE(XB_K(IKU)) -ALLOCATE(XC_K(IKU)) -ALLOCATE(XD_K(IKU)) - -CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll) -ALLOCATE(XBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) -ALLOCATE(XAF(IKU),XCF(IKU)) -ALLOCATE(XTRIGSX(3*IIU_ll)) -ALLOCATE(XTRIGSY(3*IJU_ll)) -ALLOCATE(XRHOM(IKU)) -ALLOCATE(XALK(IKU)) -ALLOCATE(XALKW(IKU)) -ALLOCATE(XALKBAS(IKU)) -ALLOCATE(XALKWBAS(IKU)) -! -IF ( LHORELAX_UVWTH .OR. LHORELAX_RV .OR. & - LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI .OR. LHORELAX_RS .OR. & - LHORELAX_RG .OR. LHORELAX_RH .OR. LHORELAX_TKE .OR. & - ANY(LHORELAX_SV) ) THEN - ALLOCATE(XKURELAX(IIU,IJU)) - ALLOCATE(XKVRELAX(IIU,IJU)) - ALLOCATE(XKWRELAX(IIU,IJU)) - ALLOCATE(LMASK_RELAX(IIU,IJU)) -ELSE - ALLOCATE(XKURELAX(0,0)) - ALLOCATE(XKVRELAX(0,0)) - ALLOCATE(XKWRELAX(0,0)) - ALLOCATE(LMASK_RELAX(0,0)) -END IF -! -! Additional fields for truly horizontal diffusion (Module MODD_DYNZD$n) -IF (LZDIFFU) THEN - CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2) -ELSE - CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2,0) -ENDIF -! -!* 3.6 Larger Scale variables (Module MODD_LSFIELD$n) -! -! -! upper relaxation part -! -ALLOCATE(XLSUM(IIU,IJU,IKU)) ; XLSUM = 0.0 -ALLOCATE(XLSVM(IIU,IJU,IKU)) ; XLSVM = 0.0 -ALLOCATE(XLSWM(IIU,IJU,IKU)) ; XLSWM = 0.0 -ALLOCATE(XLSTHM(IIU,IJU,IKU)) ; XLSTHM = 0.0 -IF ( NRR > 0 ) THEN - ALLOCATE(XLSRVM(IIU,IJU,IKU)) ; XLSRVM = 0.0 -ELSE - ALLOCATE(XLSRVM(0,0,0)) -END IF -ALLOCATE(XLSZWSM(IIU,IJU)) ; XLSZWSM = -1. -! -! lbc part -! -IF ( L1D) THEN ! 1D case -! - NSIZELBX_ll=0 - NSIZELBXU_ll=0 - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBXTKE_ll=0 - NSIZELBXR_ll=0 - NSIZELBXSV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXUM(0,0,0)) - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBXVM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBXWM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBXTHM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! -ELSEIF( L2D ) THEN ! 2D case -! - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! - CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) -! - IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2*JPHEXT - NSIZELBXU_ll=2*NRIMX+2*JPHEXT - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) - ELSE - NSIZELBX_ll=2*JPHEXT ! 2 - NSIZELBXU_ll=2*(JPHEXT+1) ! 4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) - END IF -! - IF (CTURB /= 'NONE') THEN - IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2* NRIMX+2*JPHEXT - ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) - ELSE - NSIZELBXTKE_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) - END IF - ELSE - NSIZELBXTKE_ll=0 - ALLOCATE(XLBXTKEM(0,0,0)) - END IF - ! - IF ( NRR > 0 ) THEN - IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2* NRIMX+2*JPHEXT - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) - ELSE - NSIZELBXR_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2* NRIMX+2*JPHEXT - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) - ELSE - NSIZELBXSV_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - END IF -! -ELSE ! 3D case -! -! - CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) - CALL GET_SIZEY_LB(NIMAX_ll,NJMAX_ll,NRIMY, & - IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV, & - IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2) -! -! check if local domain not to small for NRIMX NRIMY -! - IF ( CLBCX(1) /= 'CYCL' ) THEN - IF ( NRIMX .GT. IDIMX ) THEN - WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, & - " :: INI_MODEL_n ERROR: ( NRIMX > IDIMX ) ", & - " Local domain to small for relaxation NRIMX,IDIMX ", & - NRIMX,IDIMX ,& - " change relaxation parameters or number of processors " - call Print_msg(NVERB_FATAL,'GEN','INI_MODEL_n','') - END IF - END IF - IF ( CLBCY(1) /= 'CYCL' ) THEN - IF ( NRIMY .GT. IDIMY ) THEN - WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, & - " :: INI_MODEL_n ERROR: ( NRIMY > IDIMY ) ", & - " Local domain to small for relaxation NRIMY,IDIMY ", & - NRIMY,IDIMY ,& - " change relaxation parameters or number of processors " - call Print_msg(NVERB_FATAL,'GEN','INI_MODEL_n','') - END IF - END IF -IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2*JPHEXT - NSIZELBXU_ll=2*NRIMX+2*JPHEXT - NSIZELBY_ll=2*NRIMY+2*JPHEXT - NSIZELBYV_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) - ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,IKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYVM(IISIZEYFV,IJSIZEYFV,IKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYWM(IISIZEYF,IJSIZEYF,IKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU)) - ELSE - NSIZELBX_ll=2*JPHEXT ! 2 - NSIZELBXU_ll=2*(JPHEXT+1) ! 4 - NSIZELBY_ll=2*JPHEXT ! 2 - NSIZELBYV_ll=2*(JPHEXT+1) ! 4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) - ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,IKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYVM(IISIZEY4,IJSIZEY4,IKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYWM(IISIZEY2,IJSIZEY2,IKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,IKU)) - END IF - ! - IF (CTURB /= 'NONE') THEN - IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2*NRIMX+2*JPHEXT - NSIZELBYTKE_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYTKEM(IISIZEYF,IJSIZEYF,IKU)) - ELSE - NSIZELBXTKE_ll=2*JPHEXT ! 2 - NSIZELBYTKE_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYTKEM(IISIZEY2,IJSIZEY2,IKU)) - END IF - ELSE - NSIZELBXTKE_ll=0 - NSIZELBYTKE_ll=0 - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - END IF - ! - IF ( NRR > 0 ) THEN - IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2*NRIMX+2*JPHEXT - NSIZELBYR_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) - ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,IKU,NRR)) - ELSE - NSIZELBXR_ll=2*JPHEXT ! 2 - NSIZELBYR_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) - ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,IKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - NSIZELBYR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2*NRIMX+2*JPHEXT - NSIZELBYSV_ll=2*NRIMY+2*JPHEXT - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,IKU,NSV)) - ELSE - NSIZELBXSV_ll=2*JPHEXT ! 2 - NSIZELBYSV_ll=2*JPHEXT ! 2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,IKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) - END IF -END IF ! END OF THE IF STRUCTURE ON THE MODEL DIMENSION -! -! -IF ( KMI > 1 ) THEN - ! it has been assumed that the THeta field used the largest rim area compared - ! to the others prognostic variables, if it is not the case, you must change - ! these lines - ALLOCATE(XCOEFLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE( NKLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE(XCOEFLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE( NKLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE(XCOEFLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE( NKLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE(XCOEFLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE( NKLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE(XCOEFLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE( NKLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE(XCOEFLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE( NKLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE(XCOEFLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE( NKLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE(XCOEFLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) - ALLOCATE( NKLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) -ELSE - ALLOCATE(XCOEFLIN_LBXM(0,0,0)) - ALLOCATE( NKLIN_LBXM(0,0,0)) - ALLOCATE(XCOEFLIN_LBYM(0,0,0)) - ALLOCATE( NKLIN_LBYM(0,0,0)) - ALLOCATE(XCOEFLIN_LBXU(0,0,0)) - ALLOCATE( NKLIN_LBXU(0,0,0)) - ALLOCATE(XCOEFLIN_LBYU(0,0,0)) - ALLOCATE( NKLIN_LBYU(0,0,0)) - ALLOCATE(XCOEFLIN_LBXV(0,0,0)) - ALLOCATE( NKLIN_LBXV(0,0,0)) - ALLOCATE(XCOEFLIN_LBYV(0,0,0)) - ALLOCATE( NKLIN_LBYV(0,0,0)) - ALLOCATE(XCOEFLIN_LBXW(0,0,0)) - ALLOCATE( NKLIN_LBXW(0,0,0)) - ALLOCATE(XCOEFLIN_LBYW(0,0,0)) - ALLOCATE( NKLIN_LBYW(0,0,0)) -END IF -! -! allocation of the LS fields for vertical relaxation and numerical diffusion -IF( .NOT. LSTEADYLS ) THEN -! - ALLOCATE(XLSUS(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3))) - ALLOCATE(XLSVS(SIZE(XLSVM,1),SIZE(XLSVM,2),SIZE(XLSVM,3))) - ALLOCATE(XLSWS(SIZE(XLSWM,1),SIZE(XLSWM,2),SIZE(XLSWM,3))) - ALLOCATE(XLSTHS(SIZE(XLSTHM,1),SIZE(XLSTHM,2),SIZE(XLSTHM,3))) - ALLOCATE(XLSRVS(SIZE(XLSRVM,1),SIZE(XLSRVM,2),SIZE(XLSRVM,3))) - ALLOCATE(XLSZWSS(SIZE(XLSZWSM,1),SIZE(XLSZWSM,2))) -! -ELSE -! - ALLOCATE(XLSUS(0,0,0)) - ALLOCATE(XLSVS(0,0,0)) - ALLOCATE(XLSWS(0,0,0)) - ALLOCATE(XLSTHS(0,0,0)) - ALLOCATE(XLSRVS(0,0,0)) - ALLOCATE(XLSZWSS(0,0)) -! -END IF -! allocation of the LB fields for horizontal relaxation and Lateral Boundaries -IF( .NOT. ( LSTEADYLS .AND. KMI==1 ) ) THEN -! - ALLOCATE(XLBXTKES(SIZE(XLBXTKEM,1),SIZE(XLBXTKEM,2),SIZE(XLBXTKEM,3))) - ALLOCATE(XLBYTKES(SIZE(XLBYTKEM,1),SIZE(XLBYTKEM,2),SIZE(XLBYTKEM,3))) - ALLOCATE(XLBXUS(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE(XLBYUS(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE(XLBXVS(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE(XLBYVS(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE(XLBXWS(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE(XLBYWS(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) - ALLOCATE(XLBXTHS(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE(XLBYTHS(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE(XLBXRS(SIZE(XLBXRM,1),SIZE(XLBXRM,2),SIZE(XLBXRM,3),SIZE(XLBXRM,4))) - ALLOCATE(XLBYRS(SIZE(XLBYRM,1),SIZE(XLBYRM,2),SIZE(XLBYRM,3),SIZE(XLBYRM,4))) - ALLOCATE(XLBXSVS(SIZE(XLBXSVM,1),SIZE(XLBXSVM,2),SIZE(XLBXSVM,3),SIZE(XLBXSVM,4))) - ALLOCATE(XLBYSVS(SIZE(XLBYSVM,1),SIZE(XLBYSVM,2),SIZE(XLBYSVM,3),SIZE(XLBYSVM,4))) -! -ELSE -! - ALLOCATE(XLBXTKES(0,0,0)) - ALLOCATE(XLBYTKES(0,0,0)) - ALLOCATE(XLBXUS(0,0,0)) - ALLOCATE(XLBYUS(0,0,0)) - ALLOCATE(XLBXVS(0,0,0)) - ALLOCATE(XLBYVS(0,0,0)) - ALLOCATE(XLBXWS(0,0,0)) - ALLOCATE(XLBYWS(0,0,0)) - ALLOCATE(XLBXTHS(0,0,0)) - ALLOCATE(XLBYTHS(0,0,0)) - ALLOCATE(XLBXRS(0,0,0,0)) - ALLOCATE(XLBYRS(0,0,0,0)) - ALLOCATE(XLBXSVS(0,0,0,0)) - ALLOCATE(XLBYSVS(0,0,0,0)) -! -END IF -! -! -!* 3.7 Module MODD_RADIATIONS_n (except XOZON and XAER) -! -! Initialization of SW bands -NSWB_OLD = 6 ! Number of bands in ECMWF original scheme (from Fouquart et Bonnel (1980)) - ! then modified through INI_RADIATIONS_ECMWF but remains equal to 6 practically - -#ifdef MNH_ECRAD -#if ( VER_ECRAD == 140 ) -NLWB_OLD = 16 ! For XEMIS initialization (should be spectral in the future) -#endif -#endif - -NLWB_MNH = 16 ! For XEMIS initialization (should be spectral in the future) - -IF (CRAD == 'ECRA') THEN - NSWB_MNH = 14 -#ifdef MNH_ECRAD -#if ( VER_ECRAD == 140 ) - NLWB_MNH = 16 -#endif -#endif -ELSE - NSWB_MNH = NSWB_OLD -#ifdef MNH_ECRAD -#if ( VER_ECRAD == 140 ) - NLWB_MNH = NLWB_OLD -#endif -#endif -END IF - -ALLOCATE(XSW_BANDS (NSWB_MNH)) -ALLOCATE(XLW_BANDS (NLWB_MNH)) -ALLOCATE(XZENITH (IIU,IJU)) -ALLOCATE(XAZIM (IIU,IJU)) -ALLOCATE(XALBUV (IIU,IJU)) -XALBUV(:,:) = NALBUV_DEFAULT !Set to an arbitrary low value (XALBUV is needed in CH_INTERP_JVALUES even if no radiation) -ALLOCATE(XDIRSRFSWD(IIU,IJU,NSWB_MNH)) -ALLOCATE(XSCAFLASWD(IIU,IJU,NSWB_MNH)) -ALLOCATE(XFLALWD (IIU,IJU)) -! -IF (CRAD /= 'NONE') THEN - ALLOCATE(XSLOPANG(IIU,IJU)) - ALLOCATE(XSLOPAZI(IIU,IJU)) - ALLOCATE(XDTHRAD(IIU,IJU,IKU)) - ALLOCATE(XDIRFLASWD(IIU,IJU,NSWB_MNH)) - ALLOCATE(XDIR_ALB(IIU,IJU,NSWB_MNH)) - ALLOCATE(XSCA_ALB(IIU,IJU,NSWB_MNH)) - ALLOCATE(XEMIS (IIU,IJU,NLWB_MNH)) - ALLOCATE(XTSRAD (IIU,IJU)) ; XTSRAD = 0.0 - ALLOCATE(XSEA (IIU,IJU)) - ALLOCATE(XZS_XY (IIU,IJU)) - ALLOCATE(NCLEARCOL_TM1(IIU,IJU)) - ALLOCATE(XSWU(IIU,IJU,IKU)) - ALLOCATE(XSWD(IIU,IJU,IKU)) - ALLOCATE(XLWU(IIU,IJU,IKU)) - ALLOCATE(XLWD(IIU,IJU,IKU)) - ALLOCATE(XDTHRADSW(IIU,IJU,IKU)) - ALLOCATE(XDTHRADLW(IIU,IJU,IKU)) - ALLOCATE(XRADEFF(IIU,IJU,IKU)) -ELSE - ALLOCATE(XSLOPANG(0,0)) - ALLOCATE(XSLOPAZI(0,0)) - ALLOCATE(XDTHRAD(0,0,0)) - ALLOCATE(XDIRFLASWD(0,0,0)) - ALLOCATE(XDIR_ALB(0,0,0)) - ALLOCATE(XSCA_ALB(0,0,0)) - ALLOCATE(XEMIS (0,0,0)) - ALLOCATE(XTSRAD (0,0)) - ALLOCATE(XSEA (0,0)) - ALLOCATE(XZS_XY (0,0)) - ALLOCATE(NCLEARCOL_TM1(0,0)) - ALLOCATE(XSWU(0,0,0)) - ALLOCATE(XSWD(0,0,0)) - ALLOCATE(XLWU(0,0,0)) - ALLOCATE(XLWD(0,0,0)) - ALLOCATE(XDTHRADSW(0,0,0)) - ALLOCATE(XDTHRADLW(0,0,0)) - ALLOCATE(XRADEFF(0,0,0)) -END IF - -IF (CRAD == 'ECMW' .OR. CRAD == 'ECRA') THEN - ALLOCATE(XSTROATM(31,6)) - ALLOCATE(XSMLSATM(31,6)) - ALLOCATE(XSMLWATM(31,6)) - ALLOCATE(XSPOSATM(31,6)) - ALLOCATE(XSPOWATM(31,6)) - ALLOCATE(XSTATM(31,6)) -ELSE - ALLOCATE(XSTROATM(0,0)) - ALLOCATE(XSMLSATM(0,0)) - ALLOCATE(XSMLWATM(0,0)) - ALLOCATE(XSPOSATM(0,0)) - ALLOCATE(XSPOWATM(0,0)) - ALLOCATE(XSTATM(0,0)) -END IF -! -!* 3.8 Module MODD_DEEP_CONVECTION_n -! -IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN - ALLOCATE(NCOUNTCONV(IIU,IJU)) - ALLOCATE(XDTHCONV(IIU,IJU,IKU)) - ALLOCATE(XDRVCONV(IIU,IJU,IKU)) - ALLOCATE(XDRCCONV(IIU,IJU,IKU)) - ALLOCATE(XDRICONV(IIU,IJU,IKU)) - ALLOCATE(XPRCONV(IIU,IJU)) - ALLOCATE(XPACCONV(IIU,IJU)) - ALLOCATE(XPRSCONV(IIU,IJU)) - ! diagnostics - IF (LCH_CONV_LINOX) THEN - ALLOCATE(XIC_RATE(IIU,IJU)) - ALLOCATE(XCG_RATE(IIU,IJU)) - ALLOCATE(XIC_TOTAL_NUMBER(IIU,IJU)) - ALLOCATE(XCG_TOTAL_NUMBER(IIU,IJU)) - ELSE - ALLOCATE(XIC_RATE(0,0)) - ALLOCATE(XCG_RATE(0,0)) - ALLOCATE(XIC_TOTAL_NUMBER(0,0)) - ALLOCATE(XCG_TOTAL_NUMBER(0,0)) - END IF - IF ( LDIAGCONV ) THEN - ALLOCATE(XUMFCONV(IIU,IJU,IKU)) - ALLOCATE(XDMFCONV(IIU,IJU,IKU)) - ALLOCATE(XPRLFLXCONV(IIU,IJU,IKU)) - ALLOCATE(XPRSFLXCONV(IIU,IJU,IKU)) - ALLOCATE(XCAPE(IIU,IJU)) - ALLOCATE(NCLTOPCONV(IIU,IJU)) - ALLOCATE(NCLBASCONV(IIU,IJU)) - ELSE - ALLOCATE(XUMFCONV(0,0,0)) - ALLOCATE(XDMFCONV(0,0,0)) - ALLOCATE(XPRLFLXCONV(0,0,0)) - ALLOCATE(XPRSFLXCONV(0,0,0)) - ALLOCATE(XCAPE(0,0)) - ALLOCATE(NCLTOPCONV(0,0)) - ALLOCATE(NCLBASCONV(0,0)) - END IF -ELSE - ALLOCATE(NCOUNTCONV(0,0)) - ALLOCATE(XDTHCONV(0,0,0)) - ALLOCATE(XDRVCONV(0,0,0)) - ALLOCATE(XDRCCONV(0,0,0)) - ALLOCATE(XDRICONV(0,0,0)) - ALLOCATE(XPRCONV(0,0)) - ALLOCATE(XPACCONV(0,0)) - ALLOCATE(XPRSCONV(0,0)) - ALLOCATE(XIC_RATE(0,0)) - ALLOCATE(XCG_RATE(0,0)) - ALLOCATE(XIC_TOTAL_NUMBER(0,0)) - ALLOCATE(XCG_TOTAL_NUMBER(0,0)) - ALLOCATE(XUMFCONV(0,0,0)) - ALLOCATE(XDMFCONV(0,0,0)) - ALLOCATE(XPRLFLXCONV(0,0,0)) - ALLOCATE(XPRSFLXCONV(0,0,0)) - ALLOCATE(XCAPE(0,0)) - ALLOCATE(NCLTOPCONV(0,0)) - ALLOCATE(NCLBASCONV(0,0)) -END IF -! -IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') & - .AND. LSUBG_COND .AND. LSIG_CONV) THEN - ALLOCATE(XMFCONV(IIU,IJU,IKU)) -ELSE - ALLOCATE(XMFCONV(0,0,0)) -ENDIF -! -IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') & - .AND. LCHTRANS .AND. NSV > 0 ) THEN - ALLOCATE(XDSVCONV(IIU,IJU,IKU,NSV)) -ELSE - ALLOCATE(XDSVCONV(0,0,0,0)) -END IF -! -ALLOCATE(XCF_MF(IIU,IJU,IKU)) ; XCF_MF=0.0 -ALLOCATE(XRC_MF(IIU,IJU,IKU)) ; XRC_MF=0.0 -ALLOCATE(XRI_MF(IIU,IJU,IKU)) ; XRI_MF=0.0 -! -!* 3.9 Local variables -! -ALLOCATE(ZJ(IIU,IJU,IKU)) -! -!* 3.10 Forcing variables (Module MODD_FRC and MODD_FRCn) -! -IF ( LFORCING ) THEN - ALLOCATE(XWTFRC(IIU,IJU,IKU)) ; XWTFRC = XUNDEF - ALLOCATE(XUFRC_PAST(IIU,IJU,IKU)) ; XUFRC_PAST = XUNDEF - ALLOCATE(XVFRC_PAST(IIU,IJU,IKU)) ; XVFRC_PAST = XUNDEF -ELSE - ALLOCATE(XWTFRC(0,0,0)) - ALLOCATE(XUFRC_PAST(0,0,0)) - ALLOCATE(XVFRC_PAST(0,0,0)) -END IF -! -IF (KMI == 1) THEN - IF ( LFORCING ) THEN - ALLOCATE(TDTFRC(NFRC)) - ALLOCATE(XUFRC(IKU,NFRC)) - ALLOCATE(XVFRC(IKU,NFRC)) - ALLOCATE(XWFRC(IKU,NFRC)) - ALLOCATE(XTHFRC(IKU,NFRC)) - ALLOCATE(XRVFRC(IKU,NFRC)) - ALLOCATE(XTENDTHFRC(IKU,NFRC)) - ALLOCATE(XTENDRVFRC(IKU,NFRC)) - ALLOCATE(XGXTHFRC(IKU,NFRC)) - ALLOCATE(XGYTHFRC(IKU,NFRC)) - ALLOCATE(XPGROUNDFRC(NFRC)) - ALLOCATE(XTENDUFRC(IKU,NFRC)) - ALLOCATE(XTENDVFRC(IKU,NFRC)) - ELSE - ALLOCATE(TDTFRC(0)) - ALLOCATE(XUFRC(0,0)) - ALLOCATE(XVFRC(0,0)) - ALLOCATE(XWFRC(0,0)) - ALLOCATE(XTHFRC(0,0)) - ALLOCATE(XRVFRC(0,0)) - ALLOCATE(XTENDTHFRC(0,0)) - ALLOCATE(XTENDRVFRC(0,0)) - ALLOCATE(XGXTHFRC(0,0)) - ALLOCATE(XGYTHFRC(0,0)) - ALLOCATE(XPGROUNDFRC(0)) - ALLOCATE(XTENDUFRC(0,0)) - ALLOCATE(XTENDVFRC(0,0)) - END IF -ELSE - !Do not allocate because they are the same on all grids (not 'n' variables) -END IF -! ---------------------------------------------------------------------- -! -IF (L2D_ADV_FRC) THEN - WRITE(ILUOUT,*) 'L2D_ADV_FRC IS SET TO', L2D_ADV_FRC - WRITE(ILUOUT,*) 'ADV FRC WILL BE SET' - ALLOCATE(TDTADVFRC(NADVFRC)) - ALLOCATE(XDTHFRC(IIU,IJU,IKU,NADVFRC)) ; XDTHFRC=0. - ALLOCATE(XDRVFRC(IIU,IJU,IKU,NADVFRC)) ; XDRVFRC=0. -ELSE - ALLOCATE(TDTADVFRC(0)) - ALLOCATE(XDTHFRC(0,0,0,0)) - ALLOCATE(XDRVFRC(0,0,0,0)) -ENDIF - -IF (L2D_REL_FRC) THEN - WRITE(ILUOUT,*) 'L2D_REL_FRC IS SET TO', L2D_REL_FRC - WRITE(ILUOUT,*) 'REL FRC WILL BE SET' - ALLOCATE(TDTRELFRC(NRELFRC)) - ALLOCATE(XTHREL(IIU,IJU,IKU,NRELFRC)) ; XTHREL=0. - ALLOCATE(XRVREL(IIU,IJU,IKU,NRELFRC)) ; XRVREL=0. -ELSE - ALLOCATE(TDTRELFRC(0)) - ALLOCATE(XTHREL(0,0,0,0)) - ALLOCATE(XRVREL(0,0,0,0)) -ENDIF -! -!* 4.11 BIS: Eddy fluxes allocation -! -IF ( LTH_FLX ) THEN - ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0. - ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0. - IF (KMI /= 1) THEN - ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU)) - XRTHS_EDDY_FLUX = 0. - ELSE - ALLOCATE(XRTHS_EDDY_FLUX(0,0,0)) - ENDIF -ELSE - ALLOCATE(XVTH_FLUX_M(0,0,0)) - ALLOCATE(XWTH_FLUX_M(0,0,0)) - ALLOCATE(XRTHS_EDDY_FLUX(0,0,0)) -END IF -! -IF ( LUV_FLX) THEN - ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M = 0. - IF (KMI /= 1) THEN - ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU)) - XRVS_EDDY_FLUX = 0. - ELSE - ALLOCATE(XRVS_EDDY_FLUX(0,0,0)) - ENDIF -ELSE - ALLOCATE(XVU_FLUX_M(0,0,0)) - ALLOCATE(XRVS_EDDY_FLUX(0,0,0)) -END IF -! -!* 3.11 Module MODD_ICE_CONC_n -! -IF ( (CCLOUD == 'ICE3'.OR.CCLOUD == 'ICE4') .AND. & - (CPROGRAM == 'DIAG '.OR.CPROGRAM == 'MESONH')) THEN - ALLOCATE(XCIT(IIU,IJU,IKU)) -ELSE - ALLOCATE(XCIT(0,0,0)) -END IF -! -IF ( CCLOUD == 'KHKO' .OR. CCLOUD == 'C2R2') THEN - ALLOCATE(XSUPSAT(IIU,IJU,IKU)) - ALLOCATE(XNACT(IIU,IJU,IKU)) - ALLOCATE(XNPRO(IIU,IJU,IKU)) - ALLOCATE(XSSPRO(IIU,IJU,IKU)) -ELSE - ALLOCATE(XSUPSAT(0,0,0)) - ALLOCATE(XNACT(0,0,0)) - ALLOCATE(XNPRO(0,0,0)) - ALLOCATE(XSSPRO(0,0,0)) -END IF -! -!* 3.12 Module MODD_TURB_CLOUD -! -IF (.NOT.(ALLOCATED(XCEI))) ALLOCATE(XCEI(0,0,0)) -IF (KMI == NMODEL_CLOUD .AND. CTURBLEN_CLOUD/='NONE' ) THEN - DEALLOCATE(XCEI) - ALLOCATE(XCEI(IIU,IJU,IKU)) -ENDIF -! -!* 3.13 Module MODD_CH_PH_n -! -IF (LUSECHAQ.AND.(CPROGRAM == 'DIAG '.OR.CPROGRAM == 'MESONH')) THEN - IF (LCH_PH) THEN - ALLOCATE(XPHC(IIU,IJU,IKU)) - IF (NRRL==2) THEN - ALLOCATE(XPHR(IIU,IJU,IKU)) - ALLOCATE(XACPHR(IIU,IJU)) - XACPHR(:,:) = 0. - ENDIF - ENDIF - IF (NRRL==2) THEN - ALLOCATE(XACPRAQ(IIU,IJU,NSV_CHAC/2)) - XACPRAQ(:,:,:) = 0. - ENDIF -ENDIF -IF (.NOT.(ASSOCIATED(XPHC))) ALLOCATE(XPHC(0,0,0)) -IF (.NOT.(ASSOCIATED(XPHR))) ALLOCATE(XPHR(0,0,0)) -IF (.NOT.(ASSOCIATED(XACPHR))) ALLOCATE(XACPHR(0,0)) -IF (.NOT.(ASSOCIATED(XACPRAQ))) ALLOCATE(XACPRAQ(0,0,0)) -IF ((LUSECHEM).AND.(CPROGRAM == 'DIAG ')) THEN - ALLOCATE(XCHFLX(IIU,IJU,NSV_CHEM)) - XCHFLX(:,:,:) = 0. -ELSE - ALLOCATE(XCHFLX(0,0,0)) -END IF -! -!* 3.14 Module MODD_DRAG -! -IF (LDRAG) THEN - ALLOCATE(XDRAG(IIU,IJU)) -ELSE - ALLOCATE(XDRAG(0,0)) -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 4. INITIALIZE BUDGET VARIABLES -! --------------------------- -! -gles = lles_mean .or. lles_resolved .or. lles_subgrid .or. lles_updraft & - .or. lles_downdraft .or. lles_spectra -!Called if budgets are enabled via NAM_BUDGET -!or if LES budgets are enabled via NAM_LES (condition on kmi==1 to call it max once) -if ( ( cbutype /= "NONE" .and. nbumod == kmi ) .or. ( gles .and. kmi == 1 ) .or. LCHECK ) THEN - call Budget_preallocate() -end if - -IF ( CBUTYPE /= "NONE" .AND. NBUMOD == KMI ) THEN - CALL Ini_budget(ILUOUT,XTSTEP,NSV,NRR, & - LNUMDIFU,LNUMDIFTH,LNUMDIFSV, & - LHORELAX_UVWTH,LHORELAX_RV, LHORELAX_RC,LHORELAX_RR, & - LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, LHORELAX_RH,LHORELAX_TKE, & - LHORELAX_SV, LVE_RELAX, LVE_RELAX_GRD, & - LCHTRANS,LNUDGING,LDRAGTREE,LDEPOTREE,LMAIN_EOL, & - CRAD,CDCONV,CSCONV,CTURB,CTURBDIM,CCLOUD ) -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 5. INITIALIZE INTERPOLATION COEFFICIENTS -! -CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI) -! -!------------------------------------------------------------------------------- -! -!* 6. BUILT THE GENERIC OUTPUT NAME -! ---------------------------- -! -IF (KMI == 1) THEN - DO IMI = 1 , NMODEL - WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG)) - WRITE(YNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000' - CALL IO_File_add2list(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE', & - HDIRNAME=CIO_DIR, & - KLFINPRAR=INT(50,KIND=LFIINT),KLFITYPE=1,KLFIVERB=NVERB, & - TPDADFILE=LUNIT_MODEL(NDAD(IMI))%TDIAFILE ) - END DO - ! - TDIAFILE => LUNIT_MODEL(KMI)%TDIAFILE !Necessary because no call to GOTO_MODEL before needing it - ! - IF (CPROGRAM=='MESONH') THEN - IF ( NDAD(KMI) == 1) CDAD_NAME(KMI) = CEXP//'.1.'//CSEG - IF ( NDAD(KMI) == 2) CDAD_NAME(KMI) = CEXP//'.2.'//CSEG - IF ( NDAD(KMI) == 3) CDAD_NAME(KMI) = CEXP//'.3.'//CSEG - IF ( NDAD(KMI) == 4) CDAD_NAME(KMI) = CEXP//'.4.'//CSEG - IF ( NDAD(KMI) == 5) CDAD_NAME(KMI) = CEXP//'.5.'//CSEG - IF ( NDAD(KMI) == 6) CDAD_NAME(KMI) = CEXP//'.6.'//CSEG - IF ( NDAD(KMI) == 7) CDAD_NAME(KMI) = CEXP//'.7.'//CSEG - IF ( NDAD(KMI) == 8) CDAD_NAME(KMI) = CEXP//'.8.'//CSEG - END IF -END IF -! -!------------------------------------------------------------------------------- -! -!* 7. INITIALIZE GRIDS AND METRIC COEFFICIENTS -! ---------------------------------------- -! -CALL SET_GRID(KMI,TPINIFILE,IKU,NIMAX_ll,NJMAX_ll, & - XTSTEP,XSEGLEN, & - XLONORI,XLATORI,XLON,XLAT, & - XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & - XZS,XZZ,XZHAT,XZTOP,LSLEVE,XLEN1,XLEN2,XZSMT, & - ZJ, & - TDTMOD,TDTCUR,NSTOP,NBAK_NUMB,NOUT_NUMB,TBACKUPN,TOUTPUTN) -! -CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -!* update halos of metric coefficients -! -! -CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -! -CALL SET_DIRCOS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,TZINITHALO2D_ll, & - XDIRCOSXW,XDIRCOSYW,XDIRCOSZW,XCOSSLOPE,XSINSLOPE ) -! -! grid nesting initializations -IF ( KMI == 1 ) THEN - XTSTEP_MODEL1=XTSTEP -END IF -! -NDT_2_WAY(KMI)=4 -! -!------------------------------------------------------------------------------- -! -!* 8. INITIALIZE DATA FOR JVALUES AND AEROSOLS -! -IF ( LUSECHEM .OR. LCHEMDIAG ) THEN - IF ((KMI==1).AND.(CPROGRAM == "MESONH".OR.CPROGRAM == "DIAG ")) & - CALL CH_INIT_JVALUES(TDTCUR%nday, TDTCUR%nmonth, & - TDTCUR%nyear, ILUOUT, XCH_TUV_DOBNEW) -! - IF (LORILAM) THEN - CALL CH_AER_MOD_INIT - ENDIF -END IF -IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0)) -IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) -! -IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES -! -!------------------------------------------------------------------------------- -! -!* 9. INITIALIZE THE PROGNOSTIC FIELDS -! -------------------------------- -! -CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION) -CALL READ_FIELD(KMI,TPINIFILE,IIU,IJU,IKU, & - CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT,CGETZWS, & - CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR, & - CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR, & - CUVW_ADV_SCHEME, CTEMP_SCHEME, & - NSIZELBX_ll, NSIZELBXU_ll, NSIZELBY_ll, NSIZELBYV_ll, & - NSIZELBXTKE_ll,NSIZELBYTKE_ll, & - NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll, & - XUM,XVM,XWM,XDUM,XDVM,XDWM, & - XUT,XVT,XWT,XTHT,XPABST,XTKET,XRTKEMS, & - XRT,XSVT,XZWS,XCIT,XDRYMASST,XDRYMASSS, & - XSIGS,XSRCT,XCLDFR,XBL_DEPTH,XSBL_DEPTH,XWTHVMF,XPHC,XPHR, & - XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM, & - XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM, & - XLBYRM,XLBYSVM, & - NFRC,TDTFRC,XUFRC,XVFRC,XWFRC,XTHFRC,XRVFRC, & - XTENDTHFRC,XTENDRVFRC,XGXTHFRC,XGYTHFRC, & - XPGROUNDFRC, XATC, & - XTENDUFRC, XTENDVFRC, & - NADVFRC,TDTADVFRC,XDTHFRC,XDRVFRC, & - NRELFRC,TDTRELFRC,XTHREL,XRVREL, & - XVTH_FLUX_M,XWTH_FLUX_M,XVU_FLUX_M, & - XRUS_PRES,XRVS_PRES,XRWS_PRES,XRTHS_CLD,XRRS_CLD,XRSVS_CLD, & - ZIBM_LS,XIBM_XMUT,XUMEANW,XVMEANW,XWMEANW,XUMEANN,XVMEANN, & - XWMEANN,XUMEANE,XVMEANE,XWMEANE,XUMEANS,XVMEANS,XWMEANS ) - -! -!------------------------------------------------------------------------------- -! -! -!* 10. INITIALIZE REFERENCE STATE -! --------------------------- -! -! -CALL SET_REF(KMI,TPINIFILE, & - XZZ,XZHAT,ZJ,XDXX,XDYY,CLBCX,CLBCY, & - XREFMASS,XMASS_O_PHI0,XLINMASS, & - XRHODREF,XTHVREF,XRVREF,XEXNREF,XRHODJ ) -! -!------------------------------------------------------------------------------- -! -!* 10.1 INITIALIZE THE TURBULENCE VARIABLES -! ----------------------------------- -! -IF ((CTURB == 'TKEL').AND.(CCONF=='START')) THEN - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before ini_tke_eps::XUT",PRECISION) - CALL INI_TKE_EPS(CGETTKET,XTHVREF,XZZ, & - XUT,XVT,XTHT, & - XTKET,TZINITHALO3D_ll ) - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_tke_eps::XUT",PRECISION) -END IF -! -! -!* 10.2 INITIALIZE THE LES VARIABLES -! ---------------------------- -! -CALL INI_LES_n -! -!------------------------------------------------------------------------------- -! -!* 11. INITIALIZE THE SOURCE OF TOTAL DRY MASS Md -! ------------------------------------------ -! -IF((KMI==1).AND.LSTEADYLS .AND. (CCONF=='START') ) THEN - XDRYMASSS = 0. -END IF -! -!------------------------------------------------------------------------------- -! -!* 12. INITIALIZE THE MICROPHYSICS -! ---------------------------- -! -IF (CELEC == 'NONE') THEN - CALL INI_MICRO_n(TPINIFILE,ILUOUT) -! -!------------------------------------------------------------------------------- -! -!* 13. INITIALIZE THE ATMOSPHERIC ELECTRICITY -! -------------------------------------- -! -ELSE - CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, TPINIFILE, & - XTSTEP, XZZ, & - XDXX, XDYY, XDZZ, XDZX, XDZY ) -! - WRITE (UNIT=ILUOUT,& - FMT='(/,"ELECTRIC VARIABLES ARE BETWEEN INDEX",I2," AND ",I2)')& - NSV_ELECBEG, NSV_ELECEND -! - IF( CGETSVT(NSV_ELECBEG)=='INIT' ) THEN - XSVT(:,:,:,NSV_ELECBEG) = XCION_POS_FW(:,:,:) ! Nb/kg - XSVT(:,:,:,NSV_ELECEND) = XCION_NEG_FW(:,:,:) -! - XSVT(:,:,:,NSV_ELECBEG+1:NSV_ELECEND-1) = 0.0 - ELSE ! Convert elec_variables per m3 into elec_variables per kg of air - DO JSV = NSV_ELECBEG, NSV_ELECEND - XSVT(:,:,:,JSV) = XSVT(:,:,:,JSV) / XRHODREF(:,:,:) - ENDDO - END IF -END IF -! -!------------------------------------------------------------------------------- -! -!* 14. INITIALIZE THE LARGE SCALE SOURCES -! ---------------------------------- -! -IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before ini_cpl::XUT",PRECISION) - CALL INI_CPL(NSTOP,XTSTEP,LSTEADYLS,CCONF, & - CGETTKET, & - CGETRVT,CGETRCT,CGETRRT,CGETRIT, & - CGETRST,CGETRGT,CGETRHT,CGETSVT,LCH_INIT_FIELD, & - NSV,NIMAX_ll,NJMAX_ll, & - NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll, & - NSIZELBXTKE_ll,NSIZELBYTKE_ll, & - NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll, & - XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,XDRYMASST, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & - XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XLSZWSS,XDRYMASSS, & - XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS, & - XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS ) - CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_cpl::XUT",PRECISION) -! - DO JSV=NSV_CHEMBEG,NSV_CHEMEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_LNOXBEG,NSV_LNOXEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_AERBEG,NSV_AEREND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_DSTBEG,NSV_DSTEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_DSTDEPBEG,NSV_DSTDEPEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_SLTBEG,NSV_SLTEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_SLTDEPBEG,NSV_SLTDEPEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! - DO JSV=NSV_PPBEG,NSV_PPEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! -#ifdef MNH_FOREFIRE - DO JSV=NSV_FFBEG,NSV_FFEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO - ! -#endif - DO JSV=NSV_CSBEG,NSV_CSEND - XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.) - XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.) - ENDDO -! -END IF -! -IF ( KMI > 1) THEN - ! Use dummy pointers to correct an ifort BUG - DPTR_XBMX1=>XBMX1 - DPTR_XBMX2=>XBMX2 - DPTR_XBMX3=>XBMX3 - DPTR_XBMX4=>XBMX4 - DPTR_XBMY1=>XBMY1 - DPTR_XBMY2=>XBMY2 - DPTR_XBMY3=>XBMY3 - DPTR_XBMY4=>XBMY4 - DPTR_XBFX1=>XBFX1 - DPTR_XBFX2=>XBFX2 - DPTR_XBFX3=>XBFX3 - DPTR_XBFX4=>XBFX4 - DPTR_XBFY1=>XBFY1 - DPTR_XBFY2=>XBFY2 - DPTR_XBFY3=>XBFY3 - DPTR_XBFY4=>XBFY4 - DPTR_CLBCX=>CLBCX - DPTR_CLBCY=>CLBCY - ! - DPTR_XZZ=>XZZ - DPTR_XZHAT=>XZHAT - DPTR_XLSUM=>XLSUM - DPTR_XLSVM=>XLSVM - DPTR_XLSWM=>XLSWM - DPTR_XLSTHM=>XLSTHM - DPTR_XLSRVM=>XLSRVM - DPTR_XLSZWSM=>XLSZWSM - DPTR_XLSUS=>XLSUS - DPTR_XLSVS=>XLSVS - DPTR_XLSWS=>XLSWS - DPTR_XLSTHS=>XLSTHS - DPTR_XLSRVS=>XLSRVS - DPTR_XLSZWSS=>XLSZWSS - ! - DPTR_NKLIN_LBXU=>NKLIN_LBXU - DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU - DPTR_NKLIN_LBYU=>NKLIN_LBYU - DPTR_XCOEFLIN_LBYU=>XCOEFLIN_LBYU - DPTR_NKLIN_LBXV=>NKLIN_LBXV - DPTR_XCOEFLIN_LBXV=>XCOEFLIN_LBXV - DPTR_NKLIN_LBYV=>NKLIN_LBYV - DPTR_XCOEFLIN_LBYV=>XCOEFLIN_LBYV - DPTR_NKLIN_LBXW=>NKLIN_LBXW - DPTR_XCOEFLIN_LBXW=>XCOEFLIN_LBXW - DPTR_NKLIN_LBYW=>NKLIN_LBYW - DPTR_XCOEFLIN_LBYW=>XCOEFLIN_LBYW - DPTR_NKLIN_LBXM=>NKLIN_LBXM - DPTR_XCOEFLIN_LBXM=>XCOEFLIN_LBXM - DPTR_NKLIN_LBYM=>NKLIN_LBYM - DPTR_XCOEFLIN_LBYM=>XCOEFLIN_LBYM - ! - CALL INI_SPAWN_LS_n(NDAD(KMI),XTSTEP,KMI, & - DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, & - DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT, & - LSLEVE,XLEN1,XLEN2, & - DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSZWSM, & - DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSZWSS, & - DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, & - DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, & - DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, & - DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM ) - ! - DPTR_XLBXUM=>XLBXUM - DPTR_XLBYUM=>XLBYUM - DPTR_XLBXVM=>XLBXVM - DPTR_XLBYVM=>XLBYVM - DPTR_XLBXWM=>XLBXWM - DPTR_XLBYWM=>XLBYWM - DPTR_XLBXTHM=>XLBXTHM - DPTR_XLBYTHM=>XLBYTHM - DPTR_XLBXTKEM=>XLBXTKEM - DPTR_XLBYTKEM=>XLBYTKEM - DPTR_XLBXRM=>XLBXRM - DPTR_XLBYRM=>XLBYRM - DPTR_XLBXSVM=>XLBXSVM - DPTR_XLBYSVM=>XLBYSVM - IF (CCONF=='START') THEN - CALL INI_ONE_WAY_n(NDAD(KMI),KMI, & - DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, & - DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY, & - DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, & - DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, & - DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, & - DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM, & - CCLOUD, LUSECHAQ, LUSECHIC, & - DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM, & - DPTR_XLBXTHM,DPTR_XLBYTHM, & - DPTR_XLBXTKEM,DPTR_XLBYTKEM, & - DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM ) - ENDIF -END IF -! -! -!------------------------------------------------------------------------------- -! -!* 15. INITIALIZE THE SCALAR VARIABLES -! ------------------------------- -! -IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') & - CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM) - -! -!------------------------------------------------------------------------------- -! -!* 16. INITIALIZE THE PARAMETERS FOR THE DYNAMICS -! ------------------------------------------ -! -CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,CLBCX,CLBCY,XTSTEP,CPRESOPT, & - LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & - LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & - LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & - LHORELAX_SVC2R2,LHORELAX_SVC1R3,LHORELAX_SVELEC,LHORELAX_SVLG, & - LHORELAX_SVCHEM,LHORELAX_SVAER,LHORELAX_SVDST,LHORELAX_SVSLT, & - LHORELAX_SVPP,LHORELAX_SVCS,LHORELAX_SVCHIC,LHORELAX_SVSNW, & -#ifdef MNH_FOREFIRE - LHORELAX_SVFF, & -#endif - XRIMKMAX,NRIMX,NRIMY, & - XALKTOP,XALKGRD,XALZBOT,XALZBAS, & - XT4DIFU,XT4DIFTH,XT4DIFSV, & - XCORIOX,XCORIOY,XCORIOZ,XCURVX,XCURVY, & - XDXHATM,XDYHATM,XRHOM,XAF,XBFY,XCF,XTRIGSX,XTRIGSY,NIFAXX,NIFAXY,& - XALK,XALKW,NALBOT,XALKBAS,XALKWBAS,NALBAS, & - LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX, & - XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV, & - LZDIFFU,XZDIFFU_HALO2, & - XBFB,XBF_SXP2_YP1_Z, & - XAF_ZS,XBF_ZS,XCF_ZS, & - XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & - XA_K,XB_K,XC_K,XD_K ) -! -! -!* 16.1 Initialize the XDRAG array -! ------------- -IF (LDRAG) THEN - CALL INI_DRAG(LMOUNT,XZS,XHSTART,NSTART,XDRAG) -ENDIF -!* 16.2 Initialize the LevelSet function -! ------------- -IF (LIBM) THEN - ALLOCATE(XIBM_LS(IIU,IJU,IKU,4)) ; XIBM_LS = -XIBM_IEPS - XIBM_LS(:,:,:,1)=ZIBM_LS(:,:,:) - DEALLOCATE(ZIBM_LS) -ENDIF -!------------------------------------------------------------------------------- -! -!* 17. SURFACE FIELDS -! -------------- -! -!* 17.1 Radiative setup -! --------------- -! -IF (CRAD /= 'NONE') THEN - IF (CGETRAD =='INIT') THEN - GINIRAD =.TRUE. - ELSE - GINIRAD =.FALSE. - END IF - CALL INI_RADIATIONS(TPINIFILE,GINIRAD,TDTCUR,TDTEXP,XZZ, & - XDXX, XDYY, & - XSINDEL,XCOSDEL,XTSIDER,XCORSOL, & - XSLOPANG,XSLOPAZI, & - XDTHRAD,XDIRFLASWD,XSCAFLASWD, & - XFLALWD,XDIRSRFSWD,NCLEARCOL_TM1, & - XZENITH,XAZIM, & - TDTRAD_FULL,TDTRAD_CLONLY, & - TZINITHALO2D_ll, & - XRADEFF,XSWU,XSWD,XLWU, & - XLWD,XDTHRADSW,XDTHRADLW ) - ! - IF (GINIRAD) CALL SUNPOS_n(XZENITH,PAZIMSOL=XAZIM) - CALL SURF_SOLAR_GEOM (XZS, XZS_XY) - ! - ALLOCATE(XXHAT_ll (IIU_ll)) - ALLOCATE(XYHAT_ll (IJU_ll)) - ALLOCATE(XZS_ll (IIU_ll,IJU_ll)) - ALLOCATE(XZS_XY_ll (IIU_ll,IJU_ll)) - ! - CALL GATHERALL_FIELD_ll('XY',XZS,XZS_ll,IRESP) - CALL GATHERALL_FIELD_ll('XY',XZS_XY,XZS_XY_ll,IRESP) - CALL GATHERALL_FIELD_ll('XX',XXHAT,XXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,XYHAT_ll,IRESP) - XZS_MAX_ll=MAXVAL(XZS_ll) -ELSE - XAZIM = XPI - XZENITH = XPI/2. - XDIRSRFSWD = 0. - XSCAFLASWD = 0. - XFLALWD = 300. ! W/m2 - XTSIDER = 0. -END IF -! -! -CALL INI_SW_SETUP (CRAD,NSWB_MNH,XSW_BANDS) -CALL INI_LW_SETUP (CRAD,NLWB_MNH,XLW_BANDS) -! -! -! 17.1.1 Special initialisation for CO2 content -! CO2 (molar mass=44) horizontally and vertically homogeneous at 360 ppm -! -XCCO2 = 360.0E-06 * 44.0E-03 / XMD -#ifdef MNH_ECRAD -RCCO2 = 360.0E-06 * 44.0E-03 / XMD -#endif -! -! -!* 17.2 Externalized surface fields -! --------------------------- -! -ALLOCATE(ZCO2(IIU,IJU)) -ZCO2(:,:) = XCCO2 -! - -ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH)) -ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH)) -ALLOCATE(ZEMIS (IIU,IJU,NLWB_MNH)) -ALLOCATE(ZTSRAD (IIU,IJU)) -! -IF (LCOUPLES.AND.(KMI>1))THEN - CSURF ="NONE" -ELSE - IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN - CALL IO_Field_read(TPINIFILE,'SURF',CSURF) - ELSE - CSURF = "EXTE" - END IF -END IF -! -! -IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN - ! ouverture du fichier PGD - IF ( LEN_TRIM(CINIFILEPGD) > 0 ) THEN - CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_File_open(TINIFILEPGD,KRESP=IRESP) - LUNIT_MODEL(KMI)%TINIFILEPGD => TINIFILEPGD - IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD - WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNITn" - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') - ENDIF - ELSE - ! case after a spawning - CINIFILEPGD = TPINIFILE%CNAME - END IF - ! - CALL GOTO_SURFEX(KMI) -#ifdef CPLOASIS - CALL SFX_OASIS_READ_NAM(CPROGRAM,XTSTEP) - WRITE(*,*) 'SFX-OASIS: READ NAM_SFX_SEA_CPL OK' -#endif - !* initialization of surface - CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, & - XZENITH,XAZIM,XSW_BANDS,XLW_BANDS,ZDIR_ALB,ZSCA_ALB, & - ZEMIS,ZTSRAD ) - ! - IF (SIZE(XEMIS)>0) THEN - XDIR_ALB = ZDIR_ALB - XSCA_ALB = ZSCA_ALB - XEMIS = ZEMIS - XTSRAD = ZTSRAD - CALL MNHGET_SURF_PARAM_n (PSEA=XSEA) - END IF -ELSE - !* fields not physically necessary, but must be initialized - IF (SIZE(XEMIS)>0) THEN - XDIR_ALB = 0. - XSCA_ALB = 0. - XEMIS = 1. - XTSRAD = XTT - XSEA = 1. - END IF -END IF -IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN - ! ouverture du fichier PGD - CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_File_open(TINIFILEPGD,KRESP=IRESP) - LUNIT_MODEL(KMI)%TINIFILEPGD => TINIFILEPGD - IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD - WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNIT2_SPA" - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') - ENDIF -ENDIF -! -IF (.NOT.ASSOCIATED(TINIFILEPGD)) TINIFILEPGD => TFILE_DUMMY -! - !* special case after spawning in prep_real_case -IF (CSURF=='EXRM' .AND. CPROGRAM=='REAL ') CSURF = 'EXTE' -! -DEALLOCATE(ZDIR_ALB) -DEALLOCATE(ZSCA_ALB) -DEALLOCATE(ZEMIS ) -DEALLOCATE(ZTSRAD ) -! -DEALLOCATE(ZCO2) -! -! -!* in a RESTART case, reads surface radiative quantities in the MESONH file -! -IF ((CRAD == 'ECMW' .OR. CRAD == 'ECRA') .AND. CGETRAD=='READ') THEN - CALL INI_SURF_RAD(TPINIFILE, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD) -END IF -! -! -!* 17.3 Mesonh fields -! ------------- -! -IF (CPROGRAM/='REAL ') CALL MNHREAD_ZS_DUMMY_n(TINIFILEPGD) -! -!------------------------------------------------------------------------------- -! -!* 18. INITIALIZE THE PARAMETERS FOR THE PHYSICS -! ----------------------------------------- -! -IF (CRAD == 'ECMW') THEN -! -!* get cover mask for aerosols -! - IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ') THEN - ALLOCATE(ZSEA(IIU,IJU)) - ALLOCATE(ZTOWN(IIU,IJU)) - ALLOCATE(ZBARE(IIU,IJU)) - IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(KMI) - CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE) - ELSE - ZSEA (:,:) = 1. - ZTOWN(:,:) = 0. - ZBARE(:,:) = 0. - END IF -! - IF ( CAOP=='EXPL' .AND. LDUST .AND. KMI==1) THEN - ALLOCATE( XEXT_COEFF_WVL_LKT_DUST( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) ) - ALLOCATE( XEXT_COEFF_550_LKT_DUST( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST ) ) - ALLOCATE( XPIZA_LKT_DUST ( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) ) - ALLOCATE( XCGA_LKT_DUST ( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) ) - END IF -! - IF ( CAOP=='EXPL' .AND. LSALT .AND. KMI==1) THEN - ALLOCATE( XEXT_COEFF_WVL_LKT_SALT( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT, NMAX_WVL_SW_SALT ) ) - ALLOCATE( XEXT_COEFF_550_LKT_SALT( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT ) ) - ALLOCATE( XPIZA_LKT_SALT ( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT, NMAX_WVL_SW_SALT ) ) - ALLOCATE( XCGA_LKT_SALT ( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT, NMAX_WVL_SW_SALT ) ) - END IF -! - CALL INI_RADIATIONS_ECMWF (XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, & - CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM, & - XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND ) -! - DEALLOCATE(ZSEA,ZTOWN,ZBARE) - ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4))) - XAER_CLIM(:,:,:,:) =XAER(:,:,:,:) -! - END IF - -ELSE IF (CRAD == 'ECRA') THEN -#ifdef MNH_ECRAD -!* get cover mask for aerosols -! - IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ') THEN - ALLOCATE(ZSEA(IIU,IJU)) - ALLOCATE(ZTOWN(IIU,IJU)) - ALLOCATE(ZBARE(IIU,IJU)) - IF (CSURF=='EXTE') THEN - CALL GOTO_SURFEX(KMI) - CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE) - ELSE - ZSEA (:,:) = 1. - ZTOWN(:,:) = 0. - ZBARE(:,:) = 0. - END IF -! - CALL INI_RADIATIONS_ECRAD (XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, & - CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM, & - XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND ) - - DEALLOCATE(ZSEA,ZTOWN,ZBARE) - ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4))) - XAER_CLIM(:,:,:,:) = XAER(:,:,:,:) -! - END IF -#endif -ELSE - ALLOCATE (XOZON(0,0,0)) - ALLOCATE (XAER(0,0,0,0)) - ALLOCATE (XDST_WL(0,0,0,0)) - ALLOCATE (XAER_CLIM(0,0,0,0)) -END IF -! -! -! -IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN - IF (CGETCONV=='INIT') THEN - GINIDCONV=.TRUE. - ELSE - GINIDCONV=.FALSE. - END IF -! -! commensurability between convection calling time and time step -! - XDTCONV=XTSTEP*REAL( INT( (MIN(XDTCONV,1800.)+1.E-10)/XTSTEP ) ) - XDTCONV=MAX( XDTCONV, XTSTEP ) - IF (NVERB>=10) THEN - WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV - END IF - CALL INI_DEEP_CONVECTION (TPINIFILE,GINIDCONV,TDTCUR, & - NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV, & - XDRICONV,XPRCONV,XPRSCONV,XPACCONV, & - XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,& - XCAPE,NCLTOPCONV,NCLBASCONV, & - TDTDCONV, CGETSVCONV, XDSVCONV, & - LCH_CONV_LINOX, XIC_RATE, XCG_RATE, & - XIC_TOTAL_NUMBER, XCG_TOTAL_NUMBER ) - -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 19. ALLOCATION OF THE TEMPORAL SERIES -! --------------------------------- -! -IF (LSERIES .AND. CPROGRAM/='DIAG ') CALL INI_SERIES_n -! -!------------------------------------------------------------------------------- -! -! -!* 20. (re)initialize scalar variables -! ------------------------------- -! -! -IF ( LUSECHEM .OR. LCHEMDIAG ) THEN - IF (CPROGRAM=='MESONH'.AND.CCONF=='RESTA') LCH_INIT_FIELD =.FALSE. - IF (CPROGRAM=='MESONH'.OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='IDEAL ') & - CALL CH_INIT_FIELD_n(KMI, ILUOUT, NVERB) -END IF -! -!------------------------------------------------------------------------------- -! -!* 21. UPDATE HALO -! ----------- -! -! -CALL UPDATE_HALO_ll(TZINITHALO3D_ll,IINFO_ll) -CALL UPDATE_HALO_ll(TZINITHALO2D_ll,IINFO_ll) -CALL CLEANLIST_ll(TZINITHALO3D_ll) -CALL CLEANLIST_ll(TZINITHALO2D_ll) -! -! -!------------------------------------------------------------------------------- -! -!* 22. DEALLOCATION -! ------------- -! -DEALLOCATE(ZJ) -! -DEALLOCATE(XSTROATM) -DEALLOCATE(XSMLSATM) -DEALLOCATE(XSMLWATM) -DEALLOCATE(XSPOSATM) -DEALLOCATE(XSPOWATM) -! -!------------------------------------------------------------------------------- -! -!* 23. BALLOON and AIRCRAFT initializations -! ------------------------------------ -! -CALL INI_AIRCRAFT_BALLOON(TPINIFILE,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - IKU,CTURB=="TKEL" , & - XLATORI, XLONORI ) -! -!------------------------------------------------------------------------------- -! -!* 24. STATION initializations -! ----------------------- -! -CALL INI_SURFSTATION_n(XTSTEP, XSEGLEN, NRR, NSV, & - CTURB=="TKEL" , KMI, & - XLATORI, XLONORI ) -! -!------------------------------------------------------------------------------- -! -!* 25. PROFILER initializations -! ------------------------ -! -CALL INI_POSPROFILER_n(XTSTEP, XSEGLEN, NRR, NSV, & - CTURB=="TKEL", & - XLATORI, XLONORI ) -! -!------------------------------------------------------------------------------- -! -!* 26. Prognostic aerosols -! ------------------------ -! -IF ( ( CRAD=='ECMW' .OR. CRAD=='ECRA' ) .AND. CAOP=='EXPL' .AND. LORILAM ) THEN - ALLOCATE(POLYTAU(6,10,8,6,13)) - ALLOCATE(POLYSSA(6,10,8,6,13)) - ALLOCATE(POLYG (6,10,8,6,13)) - CALL INI_AEROSET1 - CALL INI_AEROSET2 - CALL INI_AEROSET3 - CALL INI_AEROSET4 - CALL INI_AEROSET5 - CALL INI_AEROSET6 -END IF -#ifdef MNH_FOREFIRE -! -!------------------------------------------------------------------------------- -! -!* 27. FOREFIRE initializations -! ------------------------ -! - -! Coupling with ForeFire if resolution is low enough -!--------------------------------------------------- -IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN - FFCOUPLING = .TRUE. -ELSE - FFCOUPLING = .FALSE. -ENDIF - -! Initializing the ForeFire variables -!------------------------------------ -IF ( LFOREFIRE ) THEN - CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP & - , TDTCUR%nyear, TDTCUR%nmonth, TDTCUR%nday, TDTCUR%xtime, XTSTEP) -END IF -#endif - -!------------------------------------------------------------------------------- -! -!* 30. Total production/Loss for chemical species -! -IF (LCHEMDIAG) THEN - CALL CH_INIT_PRODLOSSTOT_n(ILUOUT) - IF (NEQ_PLT>0) THEN - ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT)) - ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT)) - XPROD=0.0 - XLOSS=0.0 - ELSE - ALLOCATE(XPROD(0,0,0,0)) - ALLOCATE(XLOSS(0,0,0,0)) - END IF -ELSE - ALLOCATE(XPROD(0,0,0,0)) - ALLOCATE(XLOSS(0,0,0,0)) -END IF -! -!------------------------------------------------------------------------------- -! -!* 31. Extended production/loss terms for chemical species -! -IF (LCHEMDIAG) THEN - CALL CH_INIT_BUDGET_n(ILUOUT) - IF (NEQ_BUDGET>0) THEN - ALLOCATE(IINDEX(2,NNONZEROTERMS)) - ALLOCATE(IIND(NEQ_BUDGET)) - CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS) - ALLOCATE(XTCHEM(NEQ_BUDGET)) - DO JM=1,NEQ_BUDGET - IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM)) - ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM))) - ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM))) - END DO - DEALLOCATE(IIND) - DEALLOCATE(IINDEX) - ELSE - ALLOCATE(XTCHEM(0)) - END IF -ELSE - ALLOCATE(XTCHEM(0)) -END IF -!------------------------------------------------------------------------------- -! -!* 32. Wind turbine -! -IF (LMAIN_EOL .AND. KMI == NMODEL_EOL) THEN - ALLOCATE(XFX_RG(IIU,IJU,IKU)) - ALLOCATE(XFY_RG(IIU,IJU,IKU)) - ALLOCATE(XFZ_RG(IIU,IJU,IKU)) - ALLOCATE(XFX_SMR_RG(IIU,IJU,IKU)) - ALLOCATE(XFY_SMR_RG(IIU,IJU,IKU)) - ALLOCATE(XFZ_SMR_RG(IIU,IJU,IKU)) - SELECT CASE(CMETH_EOL) - CASE('ADNR') - CALL INI_EOL_ADNR - CASE('ALM') - CALL INI_EOL_ALM(XDXX,XDYY) - END SELECT -END IF -! -!* 33. Auto-coupling Atmos-Ocean LES NH -! -IF (LCOUPLES) THEN - ALLOCATE(XSSUFL_C(IIU,IJU,1)); XSSUFL_C=0.0 - ALLOCATE(XSSVFL_C(IIU,IJU,1)); XSSVFL_C=0.0 - ALLOCATE(XSSTFL_C(IIU,IJU,1)); XSSTFL_C=0.0 - ALLOCATE(XSSRFL_C(IIU,IJU,1)); XSSRFL_C=0. -ELSE - ALLOCATE(XSSUFL_C(0,0,0)) - ALLOCATE(XSSVFL_C(0,0,0)) - ALLOCATE(XSSTFL_C(0,0,0)) - ALLOCATE(XSSRFL_C(0,0,0)) -END IF -! -END SUBROUTINE INI_MODEL_n - diff --git a/src/ZSOLVER/ini_spectren.f90 b/src/ZSOLVER/ini_spectren.f90 deleted file mode 100644 index 2385b3f6d..000000000 --- a/src/ZSOLVER/ini_spectren.f90 +++ /dev/null @@ -1,941 +0,0 @@ -!MNH_LIC Copyright 2015-2019 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ####################### - MODULE MODI_INI_SPECTRE_n -! ####################### -! -INTERFACE -! - SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE) -! - USE MODD_IO, ONLY: TFILEDATA -! - INTEGER, INTENT(IN) :: KMI ! Model index - TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file -! -END SUBROUTINE INI_SPECTRE_n -! -END INTERFACE -! -END MODULE MODI_INI_SPECTRE_n -! ####################################### - SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE) -! ####################################### -! -!!**** *INI_SPECTRE_n* - routine to initialize SPECTRE (based on ini_modeln.f90) -!! -!! -!! AUTHOR -!! ------ -!! J.P Chaboureau * L.A* -!! 10/2016 (C.Lac) Cleaning of the modules -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 08/02/2019: allocate to zero-size non associated pointers -! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables -! S. Bielli 02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes -! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg -! P. Wautelet 19/04/2019: removed unused dummy arguments and variables -! -!--------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_ADV_n -USE MODD_ARGSLIST_ll, ONLY: LIST_ll -USE MODD_BIKHARDT_n -USE MODD_BUDGET -USE MODD_CH_MNHC_n, ONLY: LUSECHAQ, LUSECHIC, LCH_INIT_FIELD -USE MODD_CH_PH_n -USE MODD_CLOUD_MF_n -USE MODD_CST -USE MODD_CONF -USE MODD_CONF_n -USE MODD_CTURB -USE MODD_CURVCOR_n -USE MODD_DEEP_CONVECTION_n -USE MODD_DIM_n -USE MODD_DRAGTREE_n -USE MODD_DUST -USE MODD_DYN -USE MODD_DYN_n -USE MODD_DYNZD -USE MODD_DYNZD_n -USE MODD_FIELD_n -USE MODD_FRC -USE MODD_FRC_n -USE MODD_GET_n -USE MODD_GRID, ONLY: XLONORI,XLATORI -USE MODD_GRID_n -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LBC_n, only: CLBCX, CLBCY -USE MODD_LSFIELD_n -USE MODD_LUNIT_n, ONLY: COUTFILE, TLUOUT -USE MODD_MEAN_FIELD -USE MODD_MEAN_FIELD_n -USE MODD_METRICS_n -USE MODD_NESTING, only: NDAD, NDT_2_WAY, NDXRATIO_ALL, NDYRATIO_ALL -USE MODD_NSV -USE MODD_OUT_n -USE MODD_PARAMETERS -USE MODD_PARAM_KAFR_n -USE MODD_PARAM_MFSHALL_n -USE MODD_PARAM_n -USE MODD_PASPOL -USE MODD_PASPOL_n -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n -USE MODD_PAST_FIELD_n -USE MODD_RADIATIONS_n -USE MODD_REF -USE MODD_REF_n -USE MODD_SHADOWS_n -USE MODD_SPECTRE -USE MODD_TIME -USE MODD_TIME_n -USE MODD_TURB_n -USE MODD_VAR_ll, ONLY: IP -! -USE MODE_GATHER_ll -USE MODE_INI_ONE_WAY_n -USE MODE_IO_FIELD_READ, only: IO_Field_read -USE MODE_ll -USE MODE_MODELN_HANDLER -USE MODE_MSG -USE MODE_SPLITTINGZ_ll, ONLY: GET_DIM_EXTZ_ll -USE MODE_TYPE_ZDIFFU -! -USE MODI_INI_BIKHARDT_n -USE MODI_INI_CPL -USE MODI_INI_DYNAMICS -USE MODI_INI_SPAWN_LS_n -USE MODI_GET_SIZEX_LB -USE MODI_GET_SIZEY_LB -USE MODI_SET_GRID -USE MODI_METRICS -USE MODI_SET_REF -USE MODI_UPDATE_METRICS -USE MODI_UPDATE_NSV -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -INTEGER, INTENT(IN) :: KMI ! Model index -TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file -! -!* 0.2 declarations of local variables -! -INTEGER :: ILUOUT ! Logical unit number of output-listing -INTEGER :: IIU ! Upper dimension in x direction (local) -INTEGER :: IJU ! Upper dimension in y direction (local) -INTEGER :: IIU_ll ! Upper dimension in x direction (global) -INTEGER :: IJU_ll ! Upper dimension in y direction (global) -INTEGER :: IKU ! Upper dimension in z direction -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! Jacobian -! -! -TYPE(LIST_ll), POINTER :: TZINITHALO2D_ll ! pointer for the list of 2D fields - ! which must be communicated in INIT -TYPE(LIST_ll), POINTER :: TZINITHALO3D_ll ! pointer for the list of 3D fields - ! which must be communicated in INIT -! -INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU ! dimensions of the -INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2 ! West-east LB arrays -INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the -INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays -INTEGER :: IINFO_ll ! Return code of //routines -INTEGER :: IIY,IJY -INTEGER :: IIU_B,IJU_B -INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll -! -!------------------------------------------ -! Dummy pointers needed to correct an ifort Bug -REAL, DIMENSION(:), POINTER :: DPTR_XZHAT -REAL, DIMENSION(:), POINTER :: DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4 -REAL, DIMENSION(:), POINTER :: DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4 -REAL, DIMENSION(:), POINTER :: DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4 -REAL, DIMENSION(:), POINTER :: DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4 -CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY -INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_NKLIN_LBXV,DPTR_NKLIN_LBYV -INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_NKLIN_LBXM,DPTR_NKLIN_LBYM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXU,DPTR_XCOEFLIN_LBYU -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXV,DPTR_XCOEFLIN_LBYV -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXW,DPTR_XCOEFLIN_LBYW -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXM,DPTR_XCOEFLIN_LBYM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXWM,DPTR_XLBYWM,DPTR_XLBXTHM,DPTR_XLBYTHM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXTKEM,DPTR_XLBYTKEM -REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXSVM,DPTR_XLBYSVM -REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XZZ -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM -REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS -REAL, DIMENSION(:,:), POINTER :: DPTR_XLSZWSS,DPTR_XLSZWSM -! -!------------------------------------------------------------------------------- -! -!* 0. PROLOGUE -! -------- -! -NULLIFY(TZINITHALO2D_ll) -NULLIFY(TZINITHALO3D_ll) -! -!* 1. RETRIEVE LOGICAL UNIT NUMBER -! ---------------------------- -! -ILUOUT = TLUOUT%NLU -! -!------------------------------------------------------------------------------- -! -!* 2. END OF READING -! -------------- -!* 2.1 Read number of forcing fields -! -!* 2.2 Checks the position of vertical absorbing layer -! -IKU=NKMAX+2*JPVEXT -! -ALLOCATE(XZHAT(IKU)) -CALL IO_Field_read(TPINIFILE,'ZHAT',XZHAT) -CALL IO_Field_read(TPINIFILE,'ZTOP',XZTOP) -IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN - WRITE(ILUOUT,FMT=*) "INI_SPECTRE_n ERROR: you want to use vertical relaxation" - WRITE(ILUOUT,FMT=*) " but bottom of layer XALZBOT(",XALZBOT,")" - WRITE(ILUOUT,FMT=*) " is upper than model top (",XZHAT(IKU),")" -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SPECTRE_n','') -END IF -IF (LVE_RELAX) THEN - IF (XALZBOT>=XZHAT(IKU-4) ) THEN - WRITE(ILUOUT,FMT=*) "INI_SPECTRE_n WARNING: you want to use vertical relaxation" - WRITE(ILUOUT,FMT=*) " but the layer defined by XALZBOT(",XALZBOT,")" - WRITE(ILUOUT,FMT=*) " contains less than 5 model levels" - END IF -END IF -DEALLOCATE(XZHAT) -! -!* 2.3 Compute sizes of arrays of the extended sub-domain -! -CALL GET_DIM_EXT_ll('B',IIU,IJU) -IIU_ll=NIMAX_ll + 2 * JPHEXT -IJU_ll=NJMAX_ll + 2 * JPHEXT -! initialize NIMAX and NJMAX for not updated versions regarding the parallelism -! spawning,... -CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) -! -NRR=1 -NRRL=0 -NRRI=0 -IF (NVERB >= 5) THEN - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," WATER VARIABLES")') NRR - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," LIQUID VARIABLES")') NRRL - WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," SOLID VARIABLES")') NRRI -END IF -! -!* 2.3 Update NSV and floating indices for the current model -! -! -CALL UPDATE_NSV(KMI) -! -!------------------------------------------------------------------------------- -! -!* 3. ALLOCATE MEMORY -! ----------------- -! -!* 3.2 Module MODD_GRID_n and MODD_METRICS_n -! -IF (LCARTESIAN) THEN - ALLOCATE(XLON(0,0)) - ALLOCATE(XLAT(0,0)) - ALLOCATE(XMAP(0,0)) -ELSE - ALLOCATE(XLON(IIU,IJU)) - ALLOCATE(XLAT(IIU,IJU)) - ALLOCATE(XMAP(IIU,IJU)) -END IF -ALLOCATE(XXHAT(IIU)) -ALLOCATE(XDXHAT(IIU)) -ALLOCATE(XYHAT(IJU)) -ALLOCATE(XDYHAT(IJU)) -ALLOCATE(XZS(IIU,IJU)) -ALLOCATE(XZSMT(IIU,IJU)) -ALLOCATE(XZZ(IIU,IJU,IKU)) -ALLOCATE(XZHAT(IKU)) -! -ALLOCATE(XDXX(IIU,IJU,IKU)) -ALLOCATE(XDYY(IIU,IJU,IKU)) -ALLOCATE(XDZX(IIU,IJU,IKU)) -ALLOCATE(XDZY(IIU,IJU,IKU)) -ALLOCATE(XDZZ(IIU,IJU,IKU)) -! -!* 3.3 Modules MODD_REF and MODD_REF_n -! -IF (KMI == 1) THEN - ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU)) -END IF -ALLOCATE(XRHODREF(IIU,IJU,IKU)) -ALLOCATE(XTHVREF(IIU,IJU,IKU)) -ALLOCATE(XEXNREF(IIU,IJU,IKU)) -ALLOCATE(XRHODJ(IIU,IJU,IKU)) -IF (CEQNSYS=='DUR' .AND. LUSERV) THEN - ALLOCATE(XRVREF(IIU,IJU,IKU)) -ELSE - ALLOCATE(XRVREF(0,0,0)) -END IF -! -!* 3.4 Module MODD_CURVCOR_n -! -IF (LTHINSHELL) THEN - ALLOCATE(XCORIOX(0,0)) - ALLOCATE(XCORIOY(0,0)) -ELSE - ALLOCATE(XCORIOX(IIU,IJU)) - ALLOCATE(XCORIOY(IIU,IJU)) -END IF - ALLOCATE(XCORIOZ(IIU,IJU)) -IF (LCARTESIAN) THEN - ALLOCATE(XCURVX(0,0)) - ALLOCATE(XCURVY(0,0)) -ELSE - ALLOCATE(XCURVX(IIU,IJU)) - ALLOCATE(XCURVY(IIU,IJU)) -END IF -! -!* 3.5 Module MODD_DYN_n -! -CALL GET_DIM_EXT_ll('Y',IIY,IJY) -IF (L2D) THEN - ALLOCATE(XBFY(IIY,IJY,IKU)) -ELSE - ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisition of the - ! FFT solver -END IF -CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) -ALLOCATE(XBFB(IIU_B,IJU_B,IKU)) -CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll) -ALLOCATE(XBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)) -ALLOCATE(XAF(IKU),XCF(IKU)) -ALLOCATE(XTRIGSX(3*IIU_ll)) -ALLOCATE(XTRIGSY(3*IJU_ll)) -ALLOCATE(XRHOM(IKU)) -ALLOCATE(XALK(IKU)) -ALLOCATE(XALKW(IKU)) -! -IF ( LHORELAX_UVWTH .OR. LHORELAX_RV .OR. & - LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI .OR. LHORELAX_RS .OR. & - LHORELAX_RG .OR. LHORELAX_RH .OR. LHORELAX_TKE .OR. & - ANY(LHORELAX_SV) ) THEN - ALLOCATE(XKURELAX(IIU,IJU)) - ALLOCATE(XKVRELAX(IIU,IJU)) - ALLOCATE(XKWRELAX(IIU,IJU)) - ALLOCATE(LMASK_RELAX(IIU,IJU)) -ELSE - ALLOCATE(XKURELAX(0,0)) - ALLOCATE(XKVRELAX(0,0)) - ALLOCATE(XKWRELAX(0,0)) - ALLOCATE(LMASK_RELAX(0,0)) -END IF -! -! Additional fields for truly horizontal diffusion (Module MODD_DYNZD$n) -IF (LZDIFFU) THEN - CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2) -ELSE - CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2,0) -ENDIF -! -!* 3.6 Larger Scale variables (Module MODD_LSFIELD$n) -! -! -! upper relaxation part -! -ALLOCATE(XLSUM(IIU,IJU,IKU)) ; XLSUM = 0.0 -ALLOCATE(XLSVM(IIU,IJU,IKU)) ; XLSVM = 0.0 -ALLOCATE(XLSWM(IIU,IJU,IKU)) ; XLSWM = 0.0 -ALLOCATE(XLSTHM(IIU,IJU,IKU)) ; XLSTHM = 0.0 -IF ( NRR > 0 ) THEN - ALLOCATE(XLSRVM(IIU,IJU,IKU)) ; XLSRVM = 0.0 -ELSE - ALLOCATE(XLSRVM(0,0,0)) -END IF -! -! lbc part -! -IF ( L1D) THEN ! 1D case -! - NSIZELBX_ll=0 - NSIZELBXU_ll=0 - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBXTKE_ll=0 - NSIZELBXR_ll=0 - NSIZELBXSV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXUM(0,0,0)) - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBXVM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBXWM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBXTHM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! -ELSEIF( L2D ) THEN ! 2D case -! - NSIZELBY_ll=0 - NSIZELBYV_ll=0 - NSIZELBYTKE_ll=0 - NSIZELBYR_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBYUM(0,0,0)) - ALLOCATE(XLBYVM(0,0,0)) - ALLOCATE(XLBYWM(0,0,0)) - ALLOCATE(XLBYTHM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) -! - CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) -! - IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) - ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) - END IF -! - IF (CTURB /= 'NONE') THEN - IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2* NRIMX+2 - ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) - ELSE - NSIZELBXTKE_ll=2 - ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) - END IF - ELSE - NSIZELBXTKE_ll=0 - ALLOCATE(XLBXTKEM(0,0,0)) - END IF - ! - IF ( NRR > 0 ) THEN - IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2* NRIMX+2 - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) - ELSE - NSIZELBXR_ll=2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2* NRIMX+2 - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) - ELSE - NSIZELBXSV_ll=2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - END IF -! -ELSE ! 3D case -! -! - CALL GET_SIZEX_LB(NIMAX_ll,NJMAX_ll,NRIMX, & - IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU, & - IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2) - CALL GET_SIZEY_LB(NIMAX_ll,NJMAX_ll,NRIMY, & - IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV, & - IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2) -! -! check if local domain not to small for NRIMX NRIMY -! - IF ( CLBCX(1) /= 'CYCL' ) THEN - IF ( NRIMX+2*JPHEXT .GE. IIU ) THEN - WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, & - " :: INI_SPECTRE_n ERROR: ( NRIMX+2*JPHEXT >= IIU ) ", & - " Local domain to small for relaxation NRIMX+2*JPHEXT,IIU ", & - NRIMX+2*JPHEXT,IIU ,& - " change relaxation parameters or number of processors " - call Print_msg(NVERB_FATAL,'GEN','INI_SPECTRE_n','') - END IF - END IF - IF ( CLBCY(1) /= 'CYCL' ) THEN - IF ( NRIMY+2*JPHEXT .GE. IJU ) THEN - WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, & - " :: INI_SPECTRE_n ERROR: ( NRIMY+2*JPHEXT >= IJU ) ", & - " Local domain to small for relaxation NRIMY+2*JPHEXT,IJU ", & - NRIMY+2*JPHEXT,IJU ,& - " change relaxation parameters or number of processors " - call Print_msg(NVERB_FATAL,'GEN','INI_SPECTRE_n','') - END IF - END IF -IF ( LHORELAX_UVWTH ) THEN - NSIZELBX_ll=2*NRIMX+2 - NSIZELBXU_ll=2*NRIMX+2 - NSIZELBY_ll=2*NRIMY+2 - NSIZELBYV_ll=2*NRIMY+2 - ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU)) - ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,IKU)) - ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYVM(IISIZEYFV,IJSIZEYFV,IKU)) - ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYWM(IISIZEYF,IJSIZEYF,IKU)) - ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU)) - ELSE - NSIZELBX_ll=2 - NSIZELBXU_ll=4 - NSIZELBY_ll=2 - NSIZELBYV_ll=4 - ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU)) - ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,IKU)) - ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYVM(IISIZEY4,IJSIZEY4,IKU)) - ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYWM(IISIZEY2,IJSIZEY2,IKU)) - ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,IKU)) - END IF - ! - IF (CTURB /= 'NONE') THEN - IF ( LHORELAX_TKE) THEN - NSIZELBXTKE_ll=2*NRIMX+2 - NSIZELBYTKE_ll=2*NRIMY+2 - ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU)) - ALLOCATE(XLBYTKEM(IISIZEYF,IJSIZEYF,IKU)) - ELSE - NSIZELBXTKE_ll=2 - NSIZELBYTKE_ll=2 - ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU)) - ALLOCATE(XLBYTKEM(IISIZEY2,IJSIZEY2,IKU)) - END IF - ELSE - NSIZELBXTKE_ll=0 - NSIZELBYTKE_ll=0 - ALLOCATE(XLBXTKEM(0,0,0)) - ALLOCATE(XLBYTKEM(0,0,0)) - END IF - ! - IF ( NRR > 0 ) THEN - IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI & - .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH & - ) THEN - NSIZELBXR_ll=2*NRIMX+2 - NSIZELBYR_ll=2*NRIMY+2 - ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR)) - ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,IKU,NRR)) - ELSE - NSIZELBXR_ll=2 - NSIZELBYR_ll=2 - ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR)) - ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,IKU,NRR)) - ENDIF - ELSE - NSIZELBXR_ll=0 - NSIZELBYR_ll=0 - ALLOCATE(XLBXRM(0,0,0,0)) - ALLOCATE(XLBYRM(0,0,0,0)) - END IF - ! - IF ( NSV > 0 ) THEN - IF ( ANY( LHORELAX_SV(:)) ) THEN - NSIZELBXSV_ll=2*NRIMX+2 - NSIZELBYSV_ll=2*NRIMY+2 - ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,IKU,NSV)) - ELSE - NSIZELBXSV_ll=2 - NSIZELBYSV_ll=2 - ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV)) - ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,IKU,NSV)) - END IF - ELSE - NSIZELBXSV_ll=0 - NSIZELBYSV_ll=0 - ALLOCATE(XLBXSVM(0,0,0,0)) - ALLOCATE(XLBYSVM(0,0,0,0)) - END IF -END IF ! END OF THE IF STRUCTURE ON THE MODEL DIMENSION -! -! -IF ( KMI > 1 ) THEN - ! it has been assumed that the THeta field used the largest rim area compared - ! to the others prognostic variables, if it is not the case, you must change - ! these lines - ALLOCATE(XCOEFLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE( NKLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE(XCOEFLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE( NKLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE(XCOEFLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE( NKLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE(XCOEFLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE( NKLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE(XCOEFLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE( NKLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE(XCOEFLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE( NKLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE(XCOEFLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE( NKLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE(XCOEFLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) - ALLOCATE( NKLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) -END IF -! -! allocation of the LS fields for vertical relaxation and numerical diffusion -IF( .NOT. LSTEADYLS ) THEN -! - ALLOCATE(XLSUS(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3))) - ALLOCATE(XLSVS(SIZE(XLSVM,1),SIZE(XLSVM,2),SIZE(XLSVM,3))) - ALLOCATE(XLSWS(SIZE(XLSWM,1),SIZE(XLSWM,2),SIZE(XLSWM,3))) - ALLOCATE(XLSTHS(SIZE(XLSTHM,1),SIZE(XLSTHM,2),SIZE(XLSTHM,3))) - ALLOCATE(XLSRVS(SIZE(XLSRVM,1),SIZE(XLSRVM,2),SIZE(XLSRVM,3))) -! -ELSE -! - ALLOCATE(XLSUS(0,0,0)) - ALLOCATE(XLSVS(0,0,0)) - ALLOCATE(XLSWS(0,0,0)) - ALLOCATE(XLSTHS(0,0,0)) - ALLOCATE(XLSRVS(0,0,0)) -! -END IF -! allocation of the LB fields for horizontal relaxation and Lateral Boundaries -IF( .NOT. ( LSTEADYLS .AND. KMI==1 ) ) THEN -! - ALLOCATE(XLBXTKES(SIZE(XLBXTKEM,1),SIZE(XLBXTKEM,2),SIZE(XLBXTKEM,3))) - ALLOCATE(XLBYTKES(SIZE(XLBYTKEM,1),SIZE(XLBYTKEM,2),SIZE(XLBYTKEM,3))) - ALLOCATE(XLBXUS(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3))) - ALLOCATE(XLBYUS(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3))) - ALLOCATE(XLBXVS(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3))) - ALLOCATE(XLBYVS(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3))) - ALLOCATE(XLBXWS(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) - ALLOCATE(XLBYWS(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) - ALLOCATE(XLBXTHS(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3))) - ALLOCATE(XLBYTHS(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3))) - ALLOCATE(XLBXRS(SIZE(XLBXRM,1),SIZE(XLBXRM,2),SIZE(XLBXRM,3),SIZE(XLBXRM,4))) - ALLOCATE(XLBYRS(SIZE(XLBYRM,1),SIZE(XLBYRM,2),SIZE(XLBYRM,3),SIZE(XLBYRM,4))) - ALLOCATE(XLBXSVS(SIZE(XLBXSVM,1),SIZE(XLBXSVM,2),SIZE(XLBXSVM,3),SIZE(XLBXSVM,4))) - ALLOCATE(XLBYSVS(SIZE(XLBYSVM,1),SIZE(XLBYSVM,2),SIZE(XLBYSVM,3),SIZE(XLBYSVM,4))) -! -ELSE -! - ALLOCATE(XLBXTKES(0,0,0)) - ALLOCATE(XLBYTKES(0,0,0)) - ALLOCATE(XLBXUS(0,0,0)) - ALLOCATE(XLBYUS(0,0,0)) - ALLOCATE(XLBXVS(0,0,0)) - ALLOCATE(XLBYVS(0,0,0)) - ALLOCATE(XLBXWS(0,0,0)) - ALLOCATE(XLBYWS(0,0,0)) - ALLOCATE(XLBXTHS(0,0,0)) - ALLOCATE(XLBYTHS(0,0,0)) - ALLOCATE(XLBXRS(0,0,0,0)) - ALLOCATE(XLBYRS(0,0,0,0)) - ALLOCATE(XLBXSVS(0,0,0,0)) - ALLOCATE(XLBYSVS(0,0,0,0)) -! -END IF -! -!* 3.9 Local variables -! -ALLOCATE(ZJ(IIU,IJU,IKU)) -! -!------------------------------------------------------------------------------- -! -! -!* 5. INITIALIZE INTERPOLATION COEFFICIENTS -! -CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI) -! -!------------------------------------------------------------------------------- -! -!* 6. INITIALIZE GRIDS AND METRIC COEFFICIENTS -! ---------------------------------------- -! -CALL SET_GRID(KMI,TPINIFILE,IKU,NIMAX_ll,NJMAX_ll, & - XTSTEP,XSEGLEN, & - XLONORI,XLATORI,XLON,XLAT, & - XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & - XZS,XZZ,XZHAT,XZTOP,LSLEVE,XLEN1,XLEN2,XZSMT, & - ZJ, & - TDTMOD,TDTCUR,NSTOP,NBAK_NUMB,NOUT_NUMB,TBACKUPN,TOUTPUTN) -! -CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -!* update halos of metric coefficients -! -! -CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) -! -! -! grid nesting initializations -IF ( KMI == 1 ) THEN - XTSTEP_MODEL1=XTSTEP -END IF -! -NDT_2_WAY(KMI)=4 -! -!------------------------------------------------------------------------------- -! -!* 8. INITIALIZE THE PROGNOSTIC FIELDS -! -------------------------------- -! - -IF (LSPECTRE_U) THEN - ALLOCATE(XUT(IIU,IJU,IKU)) ; XUT = 0.0 - CALL IO_Field_read(TPINIFILE,'UT',XUT) -END IF -! -IF (LSPECTRE_V) THEN - ALLOCATE(XVT(IIU,IJU,IKU)) ; XVT = 0.0 - CALL IO_Field_read(TPINIFILE,'VT',XVT) -END IF -! -IF (LSPECTRE_W) THEN - ALLOCATE(XWT(IIU,IJU,IKU)) ; XWT = 0.0 - CALL IO_Field_read(TPINIFILE,'WT',XWT) -END IF -! -IF (LSPECTRE_TH) THEN - ALLOCATE(XTHT(IIU,IJU,IKU)) ; XTHT = 0.0 - CALL IO_Field_read(TPINIFILE,'THT',XTHT) -END IF -! -IF (LSPECTRE_RV) THEN - ALLOCATE(XRT(IIU,IJU,IKU,NRR)) - CALL IO_Field_read(TPINIFILE,'RVT',XRT(:,:,:,1)) -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 9. INITIALIZE REFERENCE STATE -! --------------------------- -! -! -CALL SET_REF(KMI,TPINIFILE, & - XZZ,XZHAT,ZJ,XDXX,XDYY,CLBCX,CLBCY, & - XREFMASS,XMASS_O_PHI0,XLINMASS, & - XRHODREF,XTHVREF,XRVREF,XEXNREF,XRHODJ) -!------------------------------------------------------------------------------- -! -!* 11. INITIALIZE THE SOURCE OF TOTAL DRY MASS Md -! ------------------------------------------ -! -IF((KMI==1).AND.LSTEADYLS) THEN - XDRYMASSS = 0. -END IF -! -! -!------------------------------------------------------------------------------- -! -!* 14. INITIALIZE THE LARGE SCALE SOURCES -! ---------------------------------- -! -IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN - IF (LSPECTRE_LSU.OR.LSPECTRE_LSV.OR.LSPECTRE_LSW.OR. & - LSPECTRE_LSRV.OR.LSPECTRE_LSTH) THEN - CALL INI_CPL(NSTOP,XTSTEP,LSTEADYLS,CCONF, & - CGETTKET, & - CGETRVT,CGETRCT,CGETRRT,CGETRIT, & - CGETRST,CGETRGT,CGETRHT,CGETSVT,LCH_INIT_FIELD, & - NSV,NIMAX_ll,NJMAX_ll, & - NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll, & - NSIZELBXTKE_ll,NSIZELBYTKE_ll, & - NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll, & - XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,XDRYMASST, & - XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & - XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & - XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XLSZWSS,XDRYMASSS, & - XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS, & - XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS ) - END IF -END IF -! -IF ( KMI > 1) THEN - ! Use dummy pointers to correct an ifort BUG - DPTR_XBMX1=>XBMX1 - DPTR_XBMX2=>XBMX2 - DPTR_XBMX3=>XBMX3 - DPTR_XBMX4=>XBMX4 - DPTR_XBMY1=>XBMY1 - DPTR_XBMY2=>XBMY2 - DPTR_XBMY3=>XBMY3 - DPTR_XBMY4=>XBMY4 - DPTR_XBFX1=>XBFX1 - DPTR_XBFX2=>XBFX2 - DPTR_XBFX3=>XBFX3 - DPTR_XBFX4=>XBFX4 - DPTR_XBFY1=>XBFY1 - DPTR_XBFY2=>XBFY2 - DPTR_XBFY3=>XBFY3 - DPTR_XBFY4=>XBFY4 - DPTR_CLBCX=>CLBCX - DPTR_CLBCY=>CLBCY - ! - DPTR_XZZ=>XZZ - DPTR_XZHAT=>XZHAT - DPTR_XLSUM=>XLSUM - DPTR_XLSVM=>XLSVM - DPTR_XLSWM=>XLSWM - DPTR_XLSTHM=>XLSTHM - DPTR_XLSRVM=>XLSRVM - DPTR_XLSZWSM=>XLSZWSM - DPTR_XLSUS=>XLSUS - DPTR_XLSVS=>XLSVS - DPTR_XLSWS=>XLSWS - DPTR_XLSTHS=>XLSTHS - DPTR_XLSRVS=>XLSRVS - DPTR_XLSZWSS=>XLSZWSS - ! - DPTR_NKLIN_LBXU=>NKLIN_LBXU - DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU - DPTR_NKLIN_LBYU=>NKLIN_LBYU - DPTR_XCOEFLIN_LBYU=>XCOEFLIN_LBYU - DPTR_NKLIN_LBXV=>NKLIN_LBXV - DPTR_XCOEFLIN_LBXV=>XCOEFLIN_LBXV - DPTR_NKLIN_LBYV=>NKLIN_LBYV - DPTR_XCOEFLIN_LBYV=>XCOEFLIN_LBYV - DPTR_NKLIN_LBXW=>NKLIN_LBXW - DPTR_XCOEFLIN_LBXW=>XCOEFLIN_LBXW - DPTR_NKLIN_LBYW=>NKLIN_LBYW - DPTR_XCOEFLIN_LBYW=>XCOEFLIN_LBYW - DPTR_NKLIN_LBXM=>NKLIN_LBXM - DPTR_XCOEFLIN_LBXM=>XCOEFLIN_LBXM - DPTR_NKLIN_LBYM=>NKLIN_LBYM - DPTR_XCOEFLIN_LBYM=>XCOEFLIN_LBYM - ! - CALL INI_SPAWN_LS_n(NDAD(KMI),XTSTEP,KMI, & - DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, & - DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT, & - LSLEVE,XLEN1,XLEN2, & - DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSZWSM, & - DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSZWSS, & - DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, & - DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, & - DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, & - DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM ) - ! - DPTR_XLBXUM=>XLBXUM - DPTR_XLBYUM=>XLBYUM - DPTR_XLBXVM=>XLBXVM - DPTR_XLBYVM=>XLBYVM - DPTR_XLBXWM=>XLBXWM - DPTR_XLBYWM=>XLBYWM - DPTR_XLBXTHM=>XLBXTHM - DPTR_XLBYTHM=>XLBYTHM - DPTR_XLBXTKEM=>XLBXTKEM - DPTR_XLBYTKEM=>XLBYTKEM - DPTR_XLBXRM=>XLBXRM - DPTR_XLBYRM=>XLBYRM - DPTR_XLBXSVM=>XLBXSVM - DPTR_XLBYSVM=>XLBYSVM - CALL INI_ONE_WAY_n(NDAD(KMI),KMI, & - DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4, & - DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4, & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY, & - DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU, & - DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV, & - DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW, & - DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM, & - CCLOUD, LUSECHAQ, LUSECHIC, & - DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM, & - DPTR_XLBXTHM,DPTR_XLBYTHM, & - DPTR_XLBXTKEM,DPTR_XLBYTKEM, & - DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM ) -END IF -! -! -!* 16. BUILT THE GENERIC OUTPUT NAME -! ---------------------------- -! -WRITE(COUTFILE,'(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG)) - -!------------------------------------------------------------------------------- -! -!* 17. INITIALIZE THE PARAMETERS FOR THE DYNAMICS -! ------------------------------------------ -! -!Allocate to zero size to not pass unallocated pointers -ALLOCATE(XALKBAS(0)) -ALLOCATE(XALKWBAS(0)) -! -CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT, & - XZHAT,CLBCX,CLBCY,XTSTEP,CPRESOPT, & - LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV, & - LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, & - LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV, & - LHORELAX_SVC2R2,LHORELAX_SVC1R3,LHORELAX_SVELEC,LHORELAX_SVLG, & - LHORELAX_SVCHEM,LHORELAX_SVAER,LHORELAX_SVDST,LHORELAX_SVSLT, & - LHORELAX_SVPP,LHORELAX_SVCS,LHORELAX_SVCHIC,LHORELAX_SVSNW, & -#ifdef MNH_FOREFIRE - LHORELAX_SVFF, & -#endif - XRIMKMAX,NRIMX,NRIMY, & - XALKTOP,XALKGRD,XALZBOT,XALZBAS, & - XT4DIFU,XT4DIFTH,XT4DIFSV, & - XCORIOX,XCORIOY,XCORIOZ,XCURVX,XCURVY, & - XDXHATM,XDYHATM,XRHOM,XAF,XBFY,XCF,XTRIGSX,XTRIGSY,NIFAXX,NIFAXY,& - XALK,XALKW,NALBOT,XALKBAS,XALKWBAS,NALBAS, & - LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX, & - XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV, & - LZDIFFU,XZDIFFU_HALO2, & - XBFB,XBF_SXP2_YP1_Z, & - XAF_ZS,XBF_ZS,XCF_ZS, & - XDXATH_ZS,XDYATH_ZS,XRHO_ZS, & - XA_K,XB_K,XC_K,XD_K) -! -!------------------------------------------------------------------------------- -! -!* 22. UPDATE HALO -! ----------- -! -! -CALL UPDATE_HALO_ll(TZINITHALO3D_ll,IINFO_ll) -CALL UPDATE_HALO_ll(TZINITHALO2D_ll,IINFO_ll) -CALL CLEANLIST_ll(TZINITHALO3D_ll) -CALL CLEANLIST_ll(TZINITHALO2D_ll) -! -! -!------------------------------------------------------------------------------- -! -!* 23. DEALLOCATION -! ------------- -! -DEALLOCATE(ZJ) -! - -END SUBROUTINE INI_SPECTRE_n diff --git a/src/ZSOLVER/modd_dynn.f90 b/src/ZSOLVER/modd_dynn.f90 deleted file mode 100644 index 4ac45311f..000000000 --- a/src/ZSOLVER/modd_dynn.f90 +++ /dev/null @@ -1,406 +0,0 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ################# - MODULE MODD_DYN_n -! ################# -! -!!**** *MODD_DYN$n* - declaration of dynamic control variables -!! -!! PURPOSE -!! ------- -! The purpose of this declarative module is to declare the dynamic -! control variables. -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! Book2 of documentation of Meso-NH (module MODD_DYNn) -!! Technical Specifications Report of the Meso-NH (chapters 2 and 3) -!! -!! AUTHOR -!! ------ -!! V. Ducrocq *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 18/05/94 -!! Modifications 16/11/94 (Lafore+Pinty) For NUM_DIFF -!! Modifications 06/01/95 (Lafore) For LSTEADY_DMASS -!! Modifications 28/07/96 (Masson) Supress LSTEADY_DMASS -!! Modifications 15/03/98 (Stein) Add LHO_RELAX for each variables -!! Modifications 22/01/01 (Gazen) Add LHORELAX_SVC2R2, _SVCHEM, _SVLG -!! Modifications 29/11/02 (Pinty) Add LHORELAX_SVC1R3, _SVELEC -!! Modifications 07/05 (P.Tulet) Add relaxation for dust and aerosol -!! Modifications 05/07 (C.Lac) Separation of num diffusion -!! Modifications 07/10 (M.Leriche) Add relaxation for ice phase chemical -!! Modification 01/2016 (JP Pinty) Add LIMA -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! Modification 07/2017 (V. Vionnet) Add blowing snow variable -!! Modification 03/2021 (JL Redelsperger) Add logical LOCEAN -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPSVMAX -IMPLICIT NONE - -TYPE DYN_t -! - INTEGER :: NSTOP ! Number of time step - REAL :: XTSTEP ! Time step - LOGICAL :: LOCEAN -! -!++++++++++++++++++++++++++++++++++ -!PART USED BY THE PRESSURE SOLVER -!++++++++++++++++++++++++++++++++++ -! - REAL, DIMENSION(:,:,:), POINTER :: XBFY=>NULL() ! Vectors giving the non - REAL, DIMENSION(:,:,:), POINTER :: XBFB=>NULL() ! Vectors giving the non - REAL, DIMENSION(:,:,:), POINTER :: XBF_SXP2_YP1_Z=>NULL() ! Vectors giving the non - REAL, DIMENSION(:,:,:), POINTER :: XBF=>NULL() ! vanishing elements of the - REAL, DIMENSION(:), POINTER :: XAF=>NULL(),XCF=>NULL() ! tri-diag matrix in the pressure equation - REAL, DIMENSION(:,:,:), POINTER :: XAF_ZS=>NULL(),XBF_ZS=>NULL(),XCF_ZS=>NULL() ! coef for Zsolver - REAL, DIMENSION(:,:) , POINTER :: XDXATH_ZS=>NULL(),XDYATH_ZS=>NULL() - REAL, DIMENSION(:,:,:), POINTER :: XRHO_ZS=>NULL() - REAL, DIMENSION(:), POINTER :: XA_K=>NULL(),XB_K=>NULL(),XC_K=>NULL(),XD_K=>NULL() -! - ! Arrays of sinus or cosinus - ! values for the FFT - REAL, DIMENSION(:), POINTER :: XTRIGSX=>NULL() ! in x-direction - REAL, DIMENSION(:), POINTER :: XTRIGSY=>NULL() ! in y-direction - INTEGER, DIMENSION(:),POINTER :: NIFAXX =>NULL() ! Decomposition in prime numbers - INTEGER, DIMENSION(:),POINTER :: NIFAXY =>NULL() ! for the FFT in x and y directions - CHARACTER(LEN=5) :: CPRESOPT ! Choice of the pressure solver - INTEGER :: NITR ! Number of iterations for the - ! pressure solver - LOGICAL :: LITRADJ ! Choice to adjust the number of - !solver iterations during - !the simulation - LOGICAL :: LRES ! Choice of a different residual - ! divergence limit - REAL :: XRES ! Value of residual divergence limit - REAL :: XRELAX ! relaxation coefficient for the - ! Richardson's method -! - REAL :: XDXHATM ! mean grid increment in the - REAL :: XDYHATM ! x and y directions - - REAL, DIMENSION (:), POINTER :: XRHOM=>NULL() ! mean of XRHODJ on the plane x y - ! localized at a mass level -! -!++++++++++++++++++++++++++++++++++ -!PART USED BY THE ABSORBING LAYERS -!++++++++++++++++++++++++++++++++++ -! - INTEGER :: NALBOT ! Vertical index corresponding to the - ! absorbing layer base -! - INTEGER :: NALBAS ! Vertical index corresponding to the - ! absorbing layer base -! - REAL, DIMENSION(:), POINTER :: XALK=>NULL() ! Function of the absorbing - ! layer damping coefficient defined for - ! u,v,and theta - REAL, DIMENSION(:), POINTER :: XALKW=>NULL() ! Idem but defined for w -! - REAL, DIMENSION(:), POINTER :: XALKBAS=>NULL() ! Function of the absorbing - ! layer damping coefficient defined for - ! u,v,and theta - REAL, DIMENSION(:), POINTER :: XALKWBAS=>NULL() ! Idem but defined for w -! - LOGICAL :: LVE_RELAX ! switch to activate the VErtical RELAXation - LOGICAL :: LVE_RELAX_GRD ! switch to activate the VErtical RELAXation -! -! switch to activate the HOrizontal RELAXation -! LOGICAL :: LHORELAX_UVWTH -! - LOGICAL :: LHORELAX_RV, LHORELAX_RC, LHORELAX_RR, LHORELAX_RI - LOGICAL :: LHORELAX_RS, LHORELAX_RG, LHORELAX_RH -! -! LOGICAL :: LHORELAX_TKE -! - LOGICAL :: LHORELAX_SVC2R2 - LOGICAL :: LHORELAX_SVC1R3 - LOGICAL :: LHORELAX_SVLIMA - LOGICAL :: LHORELAX_SVELEC - LOGICAL :: LHORELAX_SVCHEM - LOGICAL :: LHORELAX_SVCHIC - LOGICAL :: LHORELAX_SVLG - LOGICAL :: LHORELAX_SVDST - LOGICAL :: LHORELAX_SVSLT - LOGICAL :: LHORELAX_SVAER - LOGICAL :: LHORELAX_SVPP -#ifdef MNH_FOREFIRE - LOGICAL :: LHORELAX_SVFF -#endif - LOGICAL :: LHORELAX_SVCS - LOGICAL :: LHORELAX_SVSNW - LOGICAL, DIMENSION(:),POINTER :: LHORELAX_SV =>NULL() -! - REAL :: XRIMKMAX ! Max. value of the horiz. relaxation coeff. -! INTEGER :: NRIMX,NRIMY! Number of points in the lateral absorbing - ! layer in the x and y directions -! sizes of the West-east total LB area - INTEGER :: NSIZELBX_ll,NSIZELBXU_ll ! for T,V,W and u - INTEGER :: NSIZELBXTKE_ll ! for TKE - INTEGER :: NSIZELBXR_ll,NSIZELBXSV_ll ! for Rx and SV -! sizes of the North-south total LB area - INTEGER :: NSIZELBY_ll,NSIZELBYV_ll ! for T,U,W and v - INTEGER :: NSIZELBYTKE_ll ! for TKE - INTEGER :: NSIZELBYR_ll,NSIZELBYSV_ll ! for Rx and SV - LOGICAL, DIMENSION(:,:), POINTER :: LMASK_RELAX=>NULL() ! Mask for lateral - ! relaxation: True where it has to be performed - REAL, DIMENSION(:,:), POINTER :: XKURELAX=>NULL() ! Horizontal relaxation - REAL, DIMENSION(:,:), POINTER :: XKVRELAX=>NULL() ! coefficients for the - REAL, DIMENSION(:,:), POINTER :: XKWRELAX=>NULL() ! u, v and mass locations -! -!++++++++++++++++++++++++++++++++++++ -!PART USED BY THE NUMERICAL DIFFUSION -!++++++++++++++++++++++++++++++++++++ -! - REAL :: XT4DIFU ! Damping time scale for 2*dx wavelength - ! specified for the 4nd order num. diffusion - ! for momentum - REAL :: XT4DIFTH! for theta and mixing ratios - REAL :: XT4DIFSV! for scalar variables - REAL :: XDK2U ! 2nd order num. diffusion coef. /dx2 - ! for momentum - REAL :: XDK4U ! 4nd order num. diffusion coef. /dx4 - ! for momentum - REAL :: XDK2TH ! for theta and mixing ratios - REAL :: XDK4TH ! for theta and mixing ratios - REAL :: XDK2SV ! for scalar variables - REAL :: XDK4SV ! for scalar variables -! -END TYPE DYN_t - -TYPE(DYN_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: DYN_MODEL -LOGICAL , DIMENSION(JPMODELMAX), SAVE :: DYN_FIRST_CALL = .TRUE. - -INTEGER, POINTER :: NSTOP=>NULL() -REAL, POINTER :: XTSTEP=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XBFY=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XBFB=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XBF_SXP2_YP1_Z=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XBF=>NULL() -REAL, DIMENSION(:), POINTER :: XAF=>NULL(),XCF=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XAF_ZS=>NULL(),XBF_ZS=>NULL(),XCF_ZS=>NULL() -REAL, DIMENSION(:,:) , POINTER :: XDXATH_ZS=>NULL(),XDYATH_ZS=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XRHO_ZS=>NULL() -REAL, DIMENSION(:), POINTER :: XA_K=>NULL(),XB_K=>NULL(),XC_K=>NULL(),XD_K=>NULL() -REAL, DIMENSION(:), POINTER :: XTRIGSX=>NULL() -REAL, DIMENSION(:), POINTER :: XTRIGSY=>NULL() -INTEGER, DIMENSION(:), POINTER :: NIFAXX=>NULL() -INTEGER, DIMENSION(:), POINTER :: NIFAXY=>NULL() -CHARACTER(LEN=5), POINTER :: CPRESOPT=>NULL() -INTEGER, POINTER :: NITR=>NULL() -LOGICAL, POINTER :: LITRADJ=>NULL() -LOGICAL, POINTER :: LRES=>NULL() -LOGICAL, POINTER :: LOCEAN=>NULL() -REAL, POINTER :: XRES=>NULL() -REAL, POINTER :: XRELAX=>NULL() -REAL, POINTER :: XDXHATM=>NULL() -REAL, POINTER :: XDYHATM=>NULL() -REAL, DIMENSION (:), POINTER :: XRHOM=>NULL() -INTEGER, POINTER :: NALBOT=>NULL() -REAL, DIMENSION(:), POINTER :: XALK=>NULL() -REAL, DIMENSION(:), POINTER :: XALKW=>NULL() -INTEGER, POINTER :: NALBAS=>NULL() -REAL, DIMENSION(:), POINTER :: XALKBAS=>NULL() -REAL, DIMENSION(:), POINTER :: XALKWBAS=>NULL() -LOGICAL, POINTER :: LVE_RELAX=>NULL() -LOGICAL, POINTER :: LVE_RELAX_GRD=>NULL() -LOGICAL, POINTER :: LHORELAX_UVWTH=>NULL() -LOGICAL, POINTER :: LHORELAX_RV=>NULL(), LHORELAX_RC=>NULL(), LHORELAX_RR=>NULL(), LHORELAX_RI=>NULL() -LOGICAL, POINTER :: LHORELAX_RS=>NULL(), LHORELAX_RG=>NULL(), LHORELAX_RH=>NULL() -LOGICAL, POINTER :: LHORELAX_TKE=>NULL() -LOGICAL, POINTER :: LHORELAX_SVC2R2=>NULL() -LOGICAL, POINTER :: LHORELAX_SVC1R3=>NULL() -LOGICAL, POINTER :: LHORELAX_SVLIMA=>NULL() -LOGICAL, POINTER :: LHORELAX_SVELEC=>NULL() -LOGICAL, POINTER :: LHORELAX_SVCHEM=>NULL() -LOGICAL, POINTER :: LHORELAX_SVCHIC=>NULL() -LOGICAL, POINTER :: LHORELAX_SVLG=>NULL() -LOGICAL, POINTER :: LHORELAX_SVDST=>NULL() -LOGICAL, POINTER :: LHORELAX_SVSLT=>NULL() -LOGICAL, POINTER :: LHORELAX_SVAER=>NULL() -LOGICAL, POINTER :: LHORELAX_SVPP=>NULL() -#ifdef MNH_FOREFIRE -LOGICAL, POINTER :: LHORELAX_SVFF=>NULL() -#endif -LOGICAL, POINTER :: LHORELAX_SVCS=>NULL() -LOGICAL, POINTER :: LHORELAX_SVSNW=>NULL() -LOGICAL, DIMENSION(:), POINTER :: LHORELAX_SV=>NULL() -REAL, POINTER :: XRIMKMAX=>NULL() -INTEGER, POINTER :: NRIMX=>NULL(),NRIMY=>NULL() -INTEGER, POINTER :: NSIZELBX_ll=>NULL(),NSIZELBXU_ll=>NULL() -INTEGER, POINTER :: NSIZELBXTKE_ll=>NULL() -INTEGER, POINTER :: NSIZELBXR_ll=>NULL(),NSIZELBXSV_ll=>NULL() -INTEGER, POINTER :: NSIZELBY_ll=>NULL(),NSIZELBYV_ll=>NULL() -INTEGER, POINTER :: NSIZELBYTKE_ll=>NULL() -INTEGER, POINTER :: NSIZELBYR_ll=>NULL(),NSIZELBYSV_ll=>NULL() -LOGICAL, DIMENSION(:,:), POINTER :: LMASK_RELAX=>NULL() -REAL, DIMENSION(:,:), POINTER :: XKURELAX=>NULL() -REAL, DIMENSION(:,:), POINTER :: XKVRELAX=>NULL() -REAL, DIMENSION(:,:), POINTER :: XKWRELAX=>NULL() -REAL, POINTER :: XT4DIFU=>NULL() -REAL, POINTER :: XDK2U=>NULL() -REAL, POINTER :: XDK4U=>NULL() -REAL, POINTER :: XT4DIFTH=>NULL() -REAL, POINTER :: XDK2TH=>NULL() -REAL, POINTER :: XDK4TH=>NULL() -REAL, POINTER :: XT4DIFSV=>NULL() -REAL, POINTER :: XDK2SV=>NULL() -REAL, POINTER :: XDK4SV=>NULL() - -CONTAINS - -SUBROUTINE DYN_GOTO_MODEL(KFROM, KTO) -INTEGER, INTENT(IN) :: KFROM, KTO -! -IF (DYN_FIRST_CALL(KTO)) THEN -ALLOCATE (DYN_MODEL(KTO)%NIFAXX(19)) -ALLOCATE (DYN_MODEL(KTO)%NIFAXY(19)) -ALLOCATE (DYN_MODEL(KTO)%LHORELAX_SV(JPSVMAX)) -DYN_FIRST_CALL(KTO) = .FALSE. -ENDIF -! Save current state for allocated arrays -DYN_MODEL(KFROM)%XBFY=>XBFY -DYN_MODEL(KFROM)%XBFB=>XBFB -DYN_MODEL(KFROM)%XBF_SXP2_YP1_Z=>XBF_SXP2_YP1_Z -DYN_MODEL(KFROM)%XBF=>XBF -DYN_MODEL(KFROM)%XAF=>XAF -DYN_MODEL(KFROM)%XCF=>XCF - -DYN_MODEL(KFROM)%XAF_ZS=>XAF_ZS -DYN_MODEL(KFROM)%XBF_ZS=>XBF_ZS -DYN_MODEL(KFROM)%XCF_ZS=>XCF_ZS - -DYN_MODEL(KFROM)%XDXATH_ZS=>XDXATH_ZS -DYN_MODEL(KFROM)%XDYATH_ZS=>XDYATH_ZS -DYN_MODEL(KFROM)%XRHO_ZS=>XRHO_ZS -DYN_MODEL(KFROM)%XA_K=>XA_K -DYN_MODEL(KFROM)%XB_K=>XB_K -DYN_MODEL(KFROM)%XC_K=>XC_K -DYN_MODEL(KFROM)%XD_K=>XD_K - -DYN_MODEL(KFROM)%XTRIGSX=>XTRIGSX -DYN_MODEL(KFROM)%XTRIGSY=>XTRIGSY -DYN_MODEL(KFROM)%XRHOM=>XRHOM -DYN_MODEL(KFROM)%XALK=>XALK -DYN_MODEL(KFROM)%XALKW=>XALKW -DYN_MODEL(KFROM)%XALKBAS=>XALKBAS -DYN_MODEL(KFROM)%XALKWBAS=>XALKWBAS -DYN_MODEL(KFROM)%LMASK_RELAX=>LMASK_RELAX -DYN_MODEL(KFROM)%XKURELAX=>XKURELAX -DYN_MODEL(KFROM)%XKVRELAX=>XKVRELAX -DYN_MODEL(KFROM)%XKWRELAX=>XKWRELAX -! -! Current model is set to model KTO -NSTOP=>DYN_MODEL(KTO)%NSTOP -XTSTEP=>DYN_MODEL(KTO)%XTSTEP -XBFY=>DYN_MODEL(KTO)%XBFY -XBFB=>DYN_MODEL(KTO)%XBFB -XBF_SXP2_YP1_Z=>DYN_MODEL(KTO)%XBF_SXP2_YP1_Z -XBF=>DYN_MODEL(KTO)%XBF -XAF=>DYN_MODEL(KTO)%XAF -XCF=>DYN_MODEL(KTO)%XCF - -XAF_ZS=>DYN_MODEL(KTO)%XAF_ZS -XBF_ZS=>DYN_MODEL(KTO)%XBF_ZS -XCF_ZS=>DYN_MODEL(KTO)%XCF_ZS - -XDXATH_ZS=>DYN_MODEL(KFROM)%XDXATH_ZS -XDYATH_ZS=>DYN_MODEL(KFROM)%XDYATH_ZS -XRHO_ZS=>DYN_MODEL(KFROM)%XRHO_ZS -XA_K=>DYN_MODEL(KFROM)%XA_K -XB_K=>DYN_MODEL(KFROM)%XB_K -XC_K=>DYN_MODEL(KFROM)%XC_K -XD_K=>DYN_MODEL(KFROM)%XD_K - -XTRIGSX=>DYN_MODEL(KTO)%XTRIGSX -XTRIGSY=>DYN_MODEL(KTO)%XTRIGSY -NIFAXX=>DYN_MODEL(KTO)%NIFAXX -NIFAXY=>DYN_MODEL(KTO)%NIFAXY -CPRESOPT=>DYN_MODEL(KTO)%CPRESOPT -NITR=>DYN_MODEL(KTO)%NITR -LITRADJ=>DYN_MODEL(KTO)%LITRADJ -LRES=>DYN_MODEL(KTO)%LRES -LOCEAN=>DYN_MODEL(KTO)%LOCEAN -XRES=>DYN_MODEL(KTO)%XRES -XRELAX=>DYN_MODEL(KTO)%XRELAX -XDXHATM=>DYN_MODEL(KTO)%XDXHATM -XDYHATM=>DYN_MODEL(KTO)%XDYHATM -XRHOM=>DYN_MODEL(KTO)%XRHOM -NALBOT=>DYN_MODEL(KTO)%NALBOT -XALK=>DYN_MODEL(KTO)%XALK -XALKW=>DYN_MODEL(KTO)%XALKW -NALBAS=>DYN_MODEL(KTO)%NALBAS -XALKBAS=>DYN_MODEL(KTO)%XALKBAS -XALKWBAS=>DYN_MODEL(KTO)%XALKWBAS -LVE_RELAX=>DYN_MODEL(KTO)%LVE_RELAX -LVE_RELAX_GRD=>DYN_MODEL(KTO)%LVE_RELAX_GRD -!LHORELAX_UVWTH=>DYN_MODEL(KTO)%LHORELAX_UVWTH !Done in FIELDLIST_GOTO_MODEL -LHORELAX_RV=>DYN_MODEL(KTO)%LHORELAX_RV -LHORELAX_RC=>DYN_MODEL(KTO)%LHORELAX_RC -LHORELAX_RR=>DYN_MODEL(KTO)%LHORELAX_RR -LHORELAX_RI=>DYN_MODEL(KTO)%LHORELAX_RI -LHORELAX_RS=>DYN_MODEL(KTO)%LHORELAX_RS -LHORELAX_RG=>DYN_MODEL(KTO)%LHORELAX_RG -LHORELAX_RH=>DYN_MODEL(KTO)%LHORELAX_RH -!LHORELAX_TKE=>DYN_MODEL(KTO)%LHORELAX_TKE !Done in FIELDLIST_GOTO_MODEL -LHORELAX_SVC2R2=>DYN_MODEL(KTO)%LHORELAX_SVC2R2 -LHORELAX_SVC1R3=>DYN_MODEL(KTO)%LHORELAX_SVC1R3 -LHORELAX_SVLIMA=>DYN_MODEL(KTO)%LHORELAX_SVLIMA -LHORELAX_SVELEC=>DYN_MODEL(KTO)%LHORELAX_SVELEC -LHORELAX_SVCHEM=>DYN_MODEL(KTO)%LHORELAX_SVCHEM -LHORELAX_SVCHIC=>DYN_MODEL(KTO)%LHORELAX_SVCHIC -LHORELAX_SVLG=>DYN_MODEL(KTO)%LHORELAX_SVLG -LHORELAX_SVDST=>DYN_MODEL(KTO)%LHORELAX_SVDST -LHORELAX_SVSLT=>DYN_MODEL(KTO)%LHORELAX_SVSLT -LHORELAX_SVAER=>DYN_MODEL(KTO)%LHORELAX_SVAER -LHORELAX_SVPP=>DYN_MODEL(KTO)%LHORELAX_SVPP -#ifdef MNH_FOREFIRE -LHORELAX_SVFF=>DYN_MODEL(KTO)%LHORELAX_SVFF -#endif -LHORELAX_SVCS=>DYN_MODEL(KTO)%LHORELAX_SVCS -LHORELAX_SVSNW=>DYN_MODEL(KTO)%LHORELAX_SVSNW -LHORELAX_SV=>DYN_MODEL(KTO)%LHORELAX_SV -XRIMKMAX=>DYN_MODEL(KTO)%XRIMKMAX -!NRIMX=>DYN_MODEL(KTO)%NRIMX !Done in FIELDLIST_GOTO_MODEL -!NRIMY=>DYN_MODEL(KTO)%NRIMY !Done in FIELDLIST_GOTO_MODEL -NSIZELBX_ll=>DYN_MODEL(KTO)%NSIZELBX_ll -NSIZELBXU_ll=>DYN_MODEL(KTO)%NSIZELBXU_ll -NSIZELBXTKE_ll=>DYN_MODEL(KTO)%NSIZELBXTKE_ll -NSIZELBXR_ll=>DYN_MODEL(KTO)%NSIZELBXR_ll -NSIZELBXSV_ll=>DYN_MODEL(KTO)%NSIZELBXSV_ll -NSIZELBY_ll=>DYN_MODEL(KTO)%NSIZELBY_ll -NSIZELBYV_ll=>DYN_MODEL(KTO)%NSIZELBYV_ll -NSIZELBYTKE_ll=>DYN_MODEL(KTO)%NSIZELBYTKE_ll -NSIZELBYR_ll=>DYN_MODEL(KTO)%NSIZELBYR_ll -NSIZELBYSV_ll=>DYN_MODEL(KTO)%NSIZELBYSV_ll -LMASK_RELAX=>DYN_MODEL(KTO)%LMASK_RELAX -XKURELAX=>DYN_MODEL(KTO)%XKURELAX -XKVRELAX=>DYN_MODEL(KTO)%XKVRELAX -XKWRELAX=>DYN_MODEL(KTO)%XKWRELAX -XT4DIFU=>DYN_MODEL(KTO)%XT4DIFU -XDK2U=>DYN_MODEL(KTO)%XDK2U -XDK4U=>DYN_MODEL(KTO)%XDK4U -XT4DIFTH=>DYN_MODEL(KTO)%XT4DIFTH -XDK2TH=>DYN_MODEL(KTO)%XDK2TH -XDK4TH=>DYN_MODEL(KTO)%XDK4TH -XT4DIFSV=>DYN_MODEL(KTO)%XT4DIFSV -XDK2SV=>DYN_MODEL(KTO)%XDK2SV -XDK4SV=>DYN_MODEL(KTO)%XDK4SV - -END SUBROUTINE DYN_GOTO_MODEL - -END MODULE MODD_DYN_n diff --git a/src/ZSOLVER/read_exsegn.f90 b/src/ZSOLVER/read_exsegn.f90 deleted file mode 100644 index 536ccf015..000000000 --- a/src/ZSOLVER/read_exsegn.f90 +++ /dev/null @@ -1,2997 +0,0 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ###################### - MODULE MODI_READ_EXSEG_n -! ###################### -! -INTERFACE -! - SUBROUTINE READ_EXSEG_n(KMI,TPEXSEGFILE,HCONF,OFLAT,OUSERV, & - OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH, & - OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT, & - ODEPOS_SLT, ODUST,ODEPOS_DST, OCHTRANS, & - OORILAM,ODEPOS_AER, OLG,OPASPOL, & -#ifdef MNH_FOREFIRE - OFOREFIRE, & -#endif - OLNOX_EXPLICIT, & - OCONDSAMP,OBLOWSNOW, & - KRIMX,KRIMY, KSV_USER, & - HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC, & - HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD ) -! -USE MODD_IO, ONLY: TFILEDATA -! -INTEGER, INTENT(IN) :: KMI ! Model index -TYPE(TFILEDATA), INTENT(IN) :: TPEXSEGFILE ! EXSEG file -! The following variables are read by READ_DESFM in DESFM descriptor : -CHARACTER (LEN=*), INTENT(IN) :: HCONF ! configuration var. linked to FMfile -LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero orography -LOGICAL, INTENT(IN) :: OUSERV,OUSERC,OUSERR,OUSERI,OUSERS, & - OUSERG,OUSERH ! kind of moist variables in - ! FMfile -LOGICAL, INTENT(IN) :: OUSECI ! ice concentration in - ! FMfile -LOGICAL, INTENT(IN) :: OUSECHEM ! Chemical FLAG in FMFILE -LOGICAL, INTENT(IN) :: OUSECHAQ ! Aqueous chemical FLAG in FMFILE -LOGICAL, INTENT(IN) :: OUSECHIC ! Ice chemical FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCH_PH ! pH FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCH_CONV_LINOX ! LiNOx FLAG in FMFILE -LOGICAL, INTENT(IN) :: ODUST ! Dust FLAG in FMFILE -LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_DST ! Dust wet deposition FLAG in FMFILE -LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_SLT ! Sea Salt wet deposition FLAG in FMFILE -LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_AER ! Orilam wet deposition FLAG in FMFILE -LOGICAL, INTENT(IN) :: OSALT ! Sea Salt FLAG in FMFILE -LOGICAL, INTENT(IN) :: OORILAM ! Orilam FLAG in FMFILE -LOGICAL, INTENT(IN) :: OPASPOL ! Passive pollutant FLAG in FMFILE -#ifdef MNH_FOREFIRE -LOGICAL, INTENT(IN) :: OFOREFIRE ! ForeFire FLAG in FMFILE -#endif -LOGICAL, INTENT(IN) :: OLNOX_EXPLICIT ! explicit LNOx FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCONDSAMP ! Conditional sampling FLAG in FMFILE -LOGICAL, INTENT(IN) :: OBLOWSNOW ! Blowing snow FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCHTRANS ! LCHTRANS FLAG in FMFILE - -LOGICAL, INTENT(IN) :: OLG ! lagrangian FLAG in FMFILE -INTEGER, INTENT(IN) :: KRIMX, KRIMY ! number of points for the - ! horizontal relaxation for the outermost verticals -INTEGER, INTENT(IN) :: KSV_USER ! number of additional scalar - ! variables in FMfile -CHARACTER (LEN=*), INTENT(IN) :: HTURB ! Kind of turbulence parameterization - ! used to produce FMFILE -CHARACTER (LEN=*), INTENT(IN) :: HTOM ! Kind of third order moment -LOGICAL, INTENT(IN) :: ORMC01 ! flag for RMC01 SBL computations -CHARACTER (LEN=*), INTENT(IN) :: HRAD ! Kind of radiation scheme -CHARACTER (LEN=4), INTENT(IN) :: HDCONV ! Kind of deep convection scheme -CHARACTER (LEN=4), INTENT(IN) :: HSCONV ! Kind of shallow convection scheme -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme -CHARACTER (LEN=4), INTENT(IN) :: HELEC ! Kind of electrical scheme -CHARACTER (LEN=*), INTENT(IN) :: HEQNSYS! type of equations' system -REAL,DIMENSION(:), INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models -CHARACTER (LEN=*), INTENT(IN) :: HSTORAGE_TYPE ! type of initial file -CHARACTER (LEN=*), INTENT(IN) :: HINIFILEPGD ! name of PGD file -! -END SUBROUTINE READ_EXSEG_n -! -END INTERFACE -! -END MODULE MODI_READ_EXSEG_n -! -! -! ######################################################################### - SUBROUTINE READ_EXSEG_n(KMI,TPEXSEGFILE,HCONF,OFLAT,OUSERV, & - OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH, & - OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT, & - ODEPOS_SLT, ODUST,ODEPOS_DST, OCHTRANS, & - OORILAM,ODEPOS_AER, OLG,OPASPOL, & -#ifdef MNH_FOREFIRE - OFOREFIRE, & -#endif - OLNOX_EXPLICIT, & - OCONDSAMP, OBLOWSNOW, & - KRIMX,KRIMY, KSV_USER, & - HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC, & - HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD ) -! ######################################################################### -! -!!**** *READ_EXSEG_n * - routine to read the descriptor file EXSEG -!! -!! PURPOSE -!! ------- -! The purpose of this routine is to read the descriptor file called -! EXSEG and to control the coherence with FMfile data . -! -!! -!!** METHOD -!! ------ -!! The descriptor file is read. Namelists (NAMXXXn) which contain -!! variables linked to one nested model are at the beginning of the file. -!! Namelists (NAMXXX) which contain variables common to all models -!! are at the end of the file. When the model index is different from 1, -!! the end of the file (namelists NAMXXX) is not read. -!! -!! Coherence between the initial file (description read in DESFM file) -!! and the segment to perform (description read in EXSEG file) -!! is checked for segment achievement configurations -!! or postprocessing configuration. The get indicators are set according -!! to the following check : -!! -!! - segment achievement and preinit configurations : -!! -!! * if there is no turbulence kinetic energy in initial -!! file (HTURB='NONE'), and the segment to perform requires a turbulence -!! parameterization (CTURB /= 'NONE'), the get indicators for turbulence -!! kinetic energy variables are set to 'INIT'; i.e. these variables will be -!! set equal to zero by READ_FIELD according to the get indicators. -!! * The same procedure is applied to the dissipation of TKE. -!! * if there is no moist variables RRn in initial file (OUSERn=.FALSE.) -!! and the segment to perform requires moist variables RRn -!! (LUSERn=.TRUE.), the get indicators for moist variables RRn are set -!! equal to 'INIT'; i.e. these variables will be set equal to zero by -!! READ_FIELD according to the get indicators. -!! * if there are KSV_USER additional scalar variables in initial file and the -!! segment to perform needs more than KSV_USER additional variables, the get -!! indicators for these (NSV_USER-KSV_USER) additional scalar variables are set -!! equal to 'INIT'; i.e. these variables will be set equal to zero by -!! READ_FIELD according to the get indicators. If the segment to perform -!! needs less additional scalar variables than there are in initial file, -!! the get indicators for these (KSV_USER - NSV_USER) additional scalar variables are -!! set equal to 'SKIP'. -!! * warning messages are printed if the fields in initial file are the -!! same at time t and t-dt (HCONF='START') and a leap-frog advance -!! at first time step will be used for the segment to perform -!! (CCONF='RESTA'); It is likewise when HCONF='RESTA' and CCONF='START'. -!! * A warning message is printed if the orography in initial file is zero -!! (OFLAT=.TRUE.) and the segment to perform considers no-zero orography -!! (LFLAT=.FALSE.). It is likewise for LFLAT=.TRUE. and OFLAT=.FALSE.. -!! If the segment to perform requires zero orography (LFLAT=.TRUE.), the -!! orography (XZS) will not read in initial file but set equal to zero -!! by SET_GRID. -!! * check of the depths of the Lateral Damping Layer in x and y -!! direction is performed -!! * If some coupling files are specified, LSTEADYLS is set to T -!! * If no coupling files are specified, LSTEADYLS is set to F -!! -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODN_CONF : CCONF,LTHINSHELL,LFLAT,NMODEL,NVERB -!! -!! Module MODN_DYN : LCORIO, LZDIFFU -!! -!! Module MODN_NESTING : NDAD(m),NDTRATIO(m),XWAY(m) -!! -!! Module MODN_BUDGET : CBUTYPE,XBULEN -!! -!! Module MODN_CONF1 : LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH,CSEG -!! -!! Module MODN_DYN1 : XTSTEP,CPRESOPT,NITR,XRELAX -!! -!! Module MODD_ADV1 : CMET_ADV_SCHEME,CSV_ADV_SCHEME,CUVW_ADV_SCHEME,NLITER -!! -!! Module MODN_PARAM1 : CTURB,CRAD,CDCONV,CSCONV -!! -!! Module MODN_LUNIT1 : -!! Module MODN_LBC1 : CLBCX,CLBCY,NLBLX,NLBLY,XCPHASE,XPOND -!! -!! Module MODN_TURB_n : CTURBLEN,CTURBDIM -!! -!! Module MODD_GET1: -!! CGETTKEM,CGETTKET, -!! CGETRVM,CGETRCM,CGETRRM,CGETRIM,CGETRSM,CGETRGM,CGETRHM -!! CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETRST,CGETRGT,CGETRHT,CGETSVM -!! CGETSVT,CGETSIGS,CGETSRCM,CGETSRCT -!! NCPL_NBR,NCPL_TIMES,NCPL_CUR -!! Module MODN_LES : contains declaration of the control parameters -!! for Large Eddy Simulations' storages -!! for the forcing -!! -!! REFERENCE -!! --------- -!! Book2 of the documentation (routine READ_EXSEG_n) -!! -!! -!! AUTHOR -!! ------ -!! V. Ducrocq * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 07/06/94 -!! Modification 26/10/94 (Stein) remove NAM_GET from the Namelists -!! present in DESFM + change the namelist names -!! Modification 22/11/94 (Stein) add GET indicator for phi -!! Modification 21/12/94 (Stein) add GET indicator for LS fields -!! Modification 06/01/95 (Stein) bug in the test for Scalar Var. -!! Modifications 09/01/95 (Stein) add the turbulence scheme -!! Modifications 09/01/95 (Stein) add the 1D switch -!! Modifications 10/03/95 (Mallet) add coherence in coupling case -!! Modifications 16/03/95 (Stein) remove R from the historical variables -!! Modifications 01/03/95 (Hereil) add the budget namelists -!! Modifications 16/06/95 (Stein) coherence control for the -!! microphysical scheme + remove the wrong messge for RESTA conf -!! Modifications 30/06/95 (Stein) conditionnal reading of the fields -!! used by the moist turbulence scheme -!! Modifications 12/09/95 (Pinty) add the radiation scheme -!! Modification 06/02/96 (J.Vila) implement scalar advection schemes -!! Modifications 24/02/96 (Stein) change the default value for CCPLFILE -!! Modifications 02/05/96 (Stein Jabouille) change the Z0SEA activation -!! Modifications 24/05/96 (Stein) change the SRC SIGS control -!! Modifications 08/09/96 (Masson) the coupling file names are reset to -!! default value " " before reading in EXSEG1.nam -!! to avoid extra non-existant coupling files -!! -!! Modifications 25/04/95 (K.Suhre)add namelist NAM_BLANK -!! add read for LFORCING -!! 25/04/95 (K.Suhre)add namelist NAM_FRC -!! and switch checking -!! 06/08/96 (K.Suhre)add namelist NAM_CH_MNHCn -!! and NAM_CH_SOLVER -!! Modifications 10/10/96 (Stein) change SRC into SRCM and SRCT -!! Modifications 11/04/96 (Pinty) add the rain-ice microphysical scheme -!! Modifications 11/01/97 (Pinty) add the deep convection scheme -!! Modifications 22/05/97 (Lafore) gridnesting implementation -!! Modifications 22/06/97 (Stein) add the absolute pressure + cleaning -!! Modifications 25/08/97 (Masson) add tests on surface schemes -!! 22/10/97 (Stein) remove the RIMX /= 0 control -!! + new namelist + cleaning -!! Modifications 17/04/98 (Masson) add tests on character variables -!! Modification 15/03/99 (Masson) add tests on PROGRAM -!! Modification 04/01/00 (Masson) removes TSZ0 case -!! Modification 04/06/00 (Pinty) add C2R2 scheme -!! 11/12/00 (Tomasini) add CSEA_FLUX to MODD_PARAMn -!! delete the test on SST_FRC only in 1D -!! Modification 22/01/01 (Gazen) change NSV,KSV to NSV_USER,KSV_USER and add -!! NSV_* variables initialization -!! Modification 15/10/01 (Mallet) allow namelists in different orders -!! Modification 18/03/02 (Solmon) new radiation scheme test -!! Modification 29/11/02 (JP Pinty) add C3R5, ICE2, ICE4, ELEC -!! Modification 06/11/02 (Masson) new LES BL height diagnostic -!! Modification 06/11/02 (Jabouille) remove LTHINSHELL LFORCING test -!! Modification 01/12/03 (Gazen) change Chemical scheme interface -!! Modification 01/2004 (Masson) removes surface (externalization) -!! Modification 01/2005 (Masson) removes 1D and 2D switches -!! Modification 04/2005 (Tulet) add dust, orilam -!! Modification 03/2006 (O.Geoffroy) Add KHKO scheme -!! Modification 04/2006 (Maric) include 4th order advection scheme -!! Modification 05/2006 (Masson) add nudging -!! Modification 05/2006 Remove KEPS -!! Modification 04/2006 (Maric) include PPM advection scheme -!! Modification 04/2006 (J.Escobar) Bug dollarn add CALL UPDATE_NAM_CONFN -!! Modifications 01/2007 (Malardel,Pergaud) add the MF shallow -!! convection scheme MODN_PARAM_MFSHALL_n -!! Modification 09/2009 (J.Escobar) add more info on relaxation problems -!! Modification 09/2011 (J.Escobar) re-add 'ZRESI' choose -!! Modification 12/2011 (C.Lac) Adaptation to FIT temporal scheme -!! Modification 12/2012 (S.Bielli) add NAM_NCOUT for netcdf output (removed 08/07/2016) -!! Modification 02/2012 (Pialat/Tulet) add ForeFire -!! Modification 02/2012 (T.Lunet) add of new Runge-Kutta methods -!! Modification 01/2015 (C. Barthe) add explicit LNOx -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! M.Leriche 18/12/2015 : bug chimie glace dans prep_real_case -!! Modification 01/2016 (JP Pinty) Add LIMA -!! Modification 02/2016 (M.Leriche) treat gas and aq. chemicals separately -!! P.Wautelet 08/07/2016 : removed MNH_NCWRIT define -!! Modification 10/2016 (C.LAC) Add OSPLIT_WENO + Add droplet -!! deposition + Add max values -!! Modification 11/2016 (Ph. Wautelet) Allocate/initialise some output/backup structures -!! Modification 03/2017 (JP Chaboureau) Fix the initialization of -!! LUSERx-type variables for LIMA -!! M.Leriche 06/2017 for spawn and prep_real avoid abort if wet dep for -!! aerosol and no cloud scheme defined -!! Q.Libois 02/2018 ECRAD -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! Modification 07/2017 (V. Vionnet) add blowing snow scheme -!! Modification 01/2019 (Q. Rodier) define XCEDIS depending on BL89 or RM17 mixing length -!! Modification 01/2019 (P. Wautelet) bugs correction: incorrect writes -!! Modification 01/2019 (R. Honnert) remove SURF in CMF_UPDRAFT -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg -! C. Lac 11/2019: correction in the drag formula and application to building in addition to tree -! Q. Rodier 03/2020: add abort if use of any LHORELAX and cyclic conditions -! F.Auguste 02/2021: add IBM -! T.Nagel 02/2021: add turbulence recycling -! E.Jezequel 02/2021: add stations read from CSV file -! P. Wautelet 09/03/2021: simplify allocation of scalar variable names -! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv -! P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv -! R. Honnert 23/04/2021: add ADAP mixing length and delete HRIO and BOUT from CMF_UPDRAFT -! S. Riette 11/05/2021 HighLow cloud -!------------------------------------------------------------------------------ -! -!* 0. DECLARATIONS -! ------------ -USE MODD_BLOWSNOW -USE MODD_BUDGET -USE MODD_CH_AEROSOL -USE MODD_CH_M9_n, ONLY : NEQ -USE MODD_CONDSAMP -USE MODD_CONF -USE MODD_CONF_n, ONLY: CSTORAGE_TYPE -USE MODD_CONFZ -! USE MODD_DRAG_n -USE MODD_DUST -USE MODD_DYN -USE MODD_DYN_n, ONLY : LHORELAX_SVLIMA -#ifdef MNH_FOREFIRE -USE MODD_FOREFIRE -#endif -USE MODD_GET_n -USE MODD_GR_FIELD_n -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_NSV,NSV_USER_n=>NSV_USER -USE MODD_PARAMETERS -USE MODD_PASPOL -USE MODD_SALT -USE MODD_VAR_ll, ONLY: NPROC -USE MODD_VISCOSITY - -USE MODE_MSG -USE MODE_POS - -USE MODI_INI_NSV -USE MODI_TEST_NAM_VAR - -USE MODN_2D_FRC -USE MODN_ADV_n ! The final filling of these modules for the model n is -USE MODN_BACKUP -USE MODN_BLANK_n -USE MODN_BLOWSNOW -USE MODN_BLOWSNOW_n -USE MODN_BUDGET -USE MODN_CH_MNHC_n -USE MODN_CH_ORILAM -USE MODN_CH_SOLVER_n -USE MODN_CONDSAMP -USE MODN_CONF -USE MODN_CONF_n -USE MODN_CONFZ -USE MODN_DRAGBLDG_n -USE MODN_DRAG_n -USE MODN_DRAGTREE_n -USE MODN_DUST -USE MODN_DYN -USE MODN_DYN_n ! to avoid the duplication of this routine for each model. -USE MODN_ELEC -USE MODN_EOL -USE MODN_EOL_ADNR -USE MODN_EOL_ALM -#ifdef MNH_FOREFIRE -USE MODN_FOREFIRE -#endif -USE MODN_FRC -USE MODN_IBM_PARAM_n -USE MODN_LATZ_EDFLX -USE MODN_LBC_n ! routine is used for each nested model. This has been done -USE MODN_LES -USE MODN_LUNIT_n -USE MODN_MEAN -USE MODN_NESTING -USE MODN_NUDGING_n -USE MODN_OUTPUT -USE MODN_PARAM_C1R3, ONLY : NAM_PARAM_C1R3, CPRISTINE_ICE_C1R3, & - CHEVRIMED_ICE_C1R3 -USE MODN_PARAM_C2R2, ONLY : EPARAM_CCN=>HPARAM_CCN, EINI_CCN=>HINI_CCN, & - WNUC=>XNUC, WALPHAC=>XALPHAC, NAM_PARAM_C2R2 -USE MODN_PARAM_ECRAD_n -USE MODN_PARAM_ICE -USE MODN_PARAM_KAFR_n -USE MODN_PARAM_LIMA, ONLY : FINI_CCN=>HINI_CCN,NAM_PARAM_LIMA,NMOD_CCN,LSCAV, & - CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, NMOD_IFN, & - LCOLD, LACTI, LNUCL, XALPHAC, XNUC, LMEYERS, LHAIL,& - LPTSPLIT -USE MODN_PARAM_MFSHALL_n -USE MODN_PARAM_n ! realized in subroutine ini_model n -USE MODN_PARAM_RAD_n -USE MODN_PASPOL -USE MODN_RECYCL_PARAM_n -USE MODN_SALT -USE MODN_SERIES -USE MODN_SERIES_n -USE MODN_STATION_n -USE MODN_TURB -USE MODN_TURB_CLOUD -USE MODN_TURB_n -USE MODN_VISCOSITY - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -! -INTEGER, INTENT(IN) :: KMI ! Model index -TYPE(TFILEDATA), INTENT(IN) :: TPEXSEGFILE ! EXSEG file -! The following variables are read by READ_DESFM in DESFM descriptor : -CHARACTER (LEN=*), INTENT(IN) :: HCONF ! configuration var. linked to FMfile -LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero orography -LOGICAL, INTENT(IN) :: OUSERV,OUSERC,OUSERR,OUSERI,OUSERS, & - OUSERG,OUSERH ! kind of moist variables in - ! FMfile -LOGICAL, INTENT(IN) :: OUSECI ! ice concentration in - ! FMfile -LOGICAL, INTENT(IN) :: OUSECHEM ! Chemical FLAG in FMFILE -LOGICAL, INTENT(IN) :: OUSECHAQ ! Aqueous chemical FLAG in FMFILE -LOGICAL, INTENT(IN) :: OUSECHIC ! Ice chemical FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCH_PH ! pH FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCH_CONV_LINOX ! LiNOx FLAG in FMFILE -LOGICAL, INTENT(IN) :: ODUST ! Dust FLAG in FMFILE -LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_DST ! Dust Deposition FLAG in FMFILE -LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_SLT ! Sea Salt wet deposition FLAG in FMFILE -LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_AER ! Orilam wet deposition FLAG in FMFILE -LOGICAL, INTENT(IN) :: OSALT ! Sea Salt FLAG in FMFILE -LOGICAL, INTENT(IN) :: OORILAM ! Orilam FLAG in FMFILE -LOGICAL, INTENT(IN) :: OPASPOL ! Passive pollutant FLAG in FMFILE -#ifdef MNH_FOREFIRE -LOGICAL, INTENT(IN) :: OFOREFIRE ! ForeFire FLAG in FMFILE -#endif -LOGICAL, INTENT(IN) :: OLNOX_EXPLICIT ! explicit LNOx FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCONDSAMP ! Conditional sampling FLAG in FMFILE -LOGICAL, INTENT(IN) :: OCHTRANS ! LCHTRANS FLAG in FMFILE -LOGICAL, INTENT(IN) :: OBLOWSNOW ! Blowing snow FLAG in FMFILE - -LOGICAL, INTENT(IN) :: OLG ! lagrangian FLAG in FMFILE -INTEGER, INTENT(IN) :: KRIMX, KRIMY ! number of points for the - ! horizontal relaxation for the outermost verticals -INTEGER, INTENT(IN) :: KSV_USER ! number of additional scalar - ! variables in FMfile -CHARACTER (LEN=*), INTENT(IN) :: HTURB ! Kind of turbulence parameterization - ! used to produce FMFILE -CHARACTER (LEN=*), INTENT(IN) :: HTOM ! Kind of third order moment -LOGICAL, INTENT(IN) :: ORMC01 ! flag for RMC01 SBL computations -CHARACTER (LEN=*), INTENT(IN) :: HRAD ! Kind of radiation scheme -CHARACTER (LEN=4), INTENT(IN) :: HDCONV ! Kind of deep convection scheme -CHARACTER (LEN=4), INTENT(IN) :: HSCONV ! Kind of shallow convection scheme -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme -CHARACTER (LEN=4), INTENT(IN) :: HELEC ! Kind of electrical scheme -CHARACTER (LEN=*), INTENT(IN) :: HEQNSYS! type of equations' system -REAL,DIMENSION(:), INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models -CHARACTER (LEN=*), INTENT(IN) :: HSTORAGE_TYPE ! type of initial file -CHARACTER (LEN=*), INTENT(IN) :: HINIFILEPGD ! name of PGD file -! -!* 0.2 declarations of local variables -! -INTEGER :: ILUSEG,ILUOUT ! logical unit numbers of EXSEG file and outputlisting -INTEGER :: JS,JCI,JI,JSV ! Loop indexes -LOGICAL :: GRELAX -LOGICAL :: GFOUND ! Return code when searching namelist -! -!------------------------------------------------------------------------------- -! -!* 1. READ EXSEG FILE -! --------------- -! -CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_EXSEG_n','called for '//TRIM(TPEXSEGFILE%CNAME)) -! -ILUSEG = TPEXSEGFILE%NLU -ILUOUT = TLUOUT%NLU -! -CALL INIT_NAM_LUNITN -CCPLFILE(:)=" " -CALL INIT_NAM_CONFN -CALL INIT_NAM_DYNN -CALL INIT_NAM_ADVN -CALL INIT_NAM_DRAGTREEN -CALL INIT_NAM_DRAGBLDGN -CALL INIT_NAM_PARAMN -CALL INIT_NAM_PARAM_RADN -#ifdef MNH_ECRAD -CALL INIT_NAM_PARAM_ECRADN -#endif -CALL INIT_NAM_PARAM_KAFRN -CALL INIT_NAM_PARAM_MFSHALLN -CALL INIT_NAM_LBCN -CALL INIT_NAM_NUDGINGN -CALL INIT_NAM_TURBN -CALL INIT_NAM_BLANKN -CALL INIT_NAM_DRAGN -CALL INIT_NAM_IBM_PARAMN -CALL INIT_NAM_RECYCL_PARAMN -CALL INIT_NAM_CH_MNHCN -CALL INIT_NAM_CH_SOLVERN -CALL INIT_NAM_SERIESN -CALL INIT_NAM_BLOWSNOWN -CALL INIT_NAM_STATIONn -! -WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')") -CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LUNITn) -CALL POSNAM(ILUSEG,'NAM_CONFN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFn) -CALL POSNAM(ILUSEG,'NAM_DYNN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYNn) -CALL POSNAM(ILUSEG,'NAM_ADVN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ADVn) -CALL POSNAM(ILUSEG,'NAM_PARAMN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAMn) -CALL POSNAM(ILUSEG,'NAM_PARAM_RADN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_RADn) -#ifdef MNH_ECRAD -CALL POSNAM(ILUSEG,'NAM_PARAM_ECRADN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ECRADn) -#endif -CALL POSNAM(ILUSEG,'NAM_PARAM_KAFRN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_KAFRn) -CALL POSNAM(ILUSEG,'NAM_PARAM_MFSHALLN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_MFSHALLn) -CALL POSNAM(ILUSEG,'NAM_LBCN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LBCn) -CALL POSNAM(ILUSEG,'NAM_NUDGINGN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NUDGINGn) -CALL POSNAM(ILUSEG,'NAM_TURBN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURBn) -CALL POSNAM(ILUSEG,'NAM_DRAGN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGn) -CALL POSNAM(ILUSEG,'NAM_IBM_PARAMN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_IBM_PARAMn) -CALL POSNAM(ILUSEG,'NAM_RECYCL_PARAMN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_RECYCL_PARAMn) -CALL POSNAM(ILUSEG,'NAM_CH_MNHCN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_MNHCn) -CALL POSNAM(ILUSEG,'NAM_CH_SOLVERN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_SOLVERn) -CALL POSNAM(ILUSEG,'NAM_SERIESN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIESn) -CALL POSNAM(ILUSEG,'NAM_BLANKN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLANKn) -CALL POSNAM(ILUSEG,'NAM_BLOWSNOWN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOWn) -CALL POSNAM(ILUSEG,'NAM_DRAGTREEN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGTREEn) -CALL POSNAM(ILUSEG,'NAM_DRAGBLDGN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGBLDGn) -CALL POSNAM(ILUSEG,'NAM_EOL',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL) -CALL POSNAM(ILUSEG,'NAM_EOL_ADNR',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADNR) -CALL POSNAM(ILUSEG,'NAM_EOL_ALM',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ALM) -CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT) -IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn) -! -IF (KMI == 1) THEN - WRITE(UNIT=ILUOUT,FMT="(' namelists common to all the models ')") - CALL POSNAM(ILUSEG,'NAM_CONF',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONF) - CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ) - CALL POSNAM(ILUSEG,'NAM_DYN',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYN) - CALL POSNAM(ILUSEG,'NAM_NESTING',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NESTING) - CALL POSNAM(ILUSEG,'NAM_BACKUP',GFOUND,ILUOUT) - IF (GFOUND) THEN - !Should have been allocated before in READ_DESFM_n - IF (.NOT.ALLOCATED(XBAK_TIME)) THEN - ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX)) - XBAK_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(XOUT_TIME)) THEN - ALLOCATE(XOUT_TIME(NMODEL,JPOUTMAX)) !Allocate *OUT* variables to prevent - XOUT_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NBAK_STEP)) THEN - ALLOCATE(NBAK_STEP(NMODEL,JPOUTMAX)) - NBAK_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NOUT_STEP)) THEN - ALLOCATE(NOUT_STEP(NMODEL,JPOUTMAX)) !problems if NAM_OUTPUT does not exist - NOUT_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(COUT_VAR)) THEN - ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX)) - COUT_VAR(:,:) = '' - END IF - READ(UNIT=ILUSEG,NML=NAM_BACKUP) - ELSE - CALL POSNAM(ILUSEG,'NAM_FMOUT',GFOUND) - IF (GFOUND) THEN - CALL PRINT_MSG(NVERB_FATAL,'IO','READ_EXSEG_n','use namelist NAM_BACKUP instead of namelist NAM_FMOUT') - ELSE - IF (CPROGRAM=='MESONH') CALL PRINT_MSG(NVERB_ERROR,'IO','READ_EXSEG_n','namelist NAM_BACKUP not found') - END IF - END IF - CALL POSNAM(ILUSEG,'NAM_OUTPUT',GFOUND,ILUOUT) - IF (GFOUND) THEN - !Should have been allocated before in READ_DESFM_n - IF (.NOT.ALLOCATED(XBAK_TIME)) THEN - ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX)) !Allocate *BAK* variables to prevent - XBAK_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(XOUT_TIME)) THEN - ALLOCATE(XOUT_TIME(NMODEL,JPOUTMAX)) - XOUT_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NBAK_STEP)) THEN - ALLOCATE(NBAK_STEP(NMODEL,JPOUTMAX)) !problems if NAM_BACKUP does not exist - NBAK_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NOUT_STEP)) THEN - ALLOCATE(NOUT_STEP(NMODEL,JPOUTMAX)) - NOUT_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(COUT_VAR)) THEN - ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX)) - COUT_VAR(:,:) = '' - END IF - READ(UNIT=ILUSEG,NML=NAM_OUTPUT) - END IF - CALL POSNAM(ILUSEG,'NAM_BUDGET',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BUDGET) - - CALL POSNAM(ILUSEG,'NAM_BU_RU',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RU ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RU was already allocated' ) - DEALLOCATE( CBULIST_RU ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(NBULISTMAXLINES) ) - CBULIST_RU(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RU) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RV',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RV ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RV was already allocated' ) - DEALLOCATE( CBULIST_RV ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(NBULISTMAXLINES) ) - CBULIST_RV(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RV) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RW',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RW ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RW was already allocated' ) - DEALLOCATE( CBULIST_RW ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(NBULISTMAXLINES) ) - CBULIST_RW(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RW) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RTH',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RTH ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTH was already allocated' ) - DEALLOCATE( CBULIST_RTH ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(NBULISTMAXLINES) ) - CBULIST_RTH(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RTH) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RTKE',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RTKE ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTKE was already allocated' ) - DEALLOCATE( CBULIST_RTKE ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(NBULISTMAXLINES) ) - CBULIST_RTKE(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RTKE) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRV',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRV ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRV was already allocated' ) - DEALLOCATE( CBULIST_RRV ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(NBULISTMAXLINES) ) - CBULIST_RRV(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRV) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRC',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRC ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRC was already allocated' ) - DEALLOCATE( CBULIST_RRC ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(NBULISTMAXLINES) ) - CBULIST_RRC(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRC) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRR',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRR ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRR was already allocated' ) - DEALLOCATE( CBULIST_RRR ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(NBULISTMAXLINES) ) - CBULIST_RRR(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRR) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRI',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRI ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRI was already allocated' ) - DEALLOCATE( CBULIST_RRI ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(NBULISTMAXLINES) ) - CBULIST_RRI(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRI) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRS',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRS ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRS was already allocated' ) - DEALLOCATE( CBULIST_RRS ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(NBULISTMAXLINES) ) - CBULIST_RRS(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRS) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRG',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRG ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRG was already allocated' ) - DEALLOCATE( CBULIST_RRG ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(NBULISTMAXLINES) ) - CBULIST_RRG(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRG) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RRH',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RRH ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRH was already allocated' ) - DEALLOCATE( CBULIST_RRH ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(NBULISTMAXLINES) ) - CBULIST_RRH(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RRH) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_BU_RSV',GFOUND,ILUOUT) - IF (GFOUND) THEN - IF ( ALLOCATED( CBULIST_RSV ) ) THEN - CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RSV was already allocated' ) - DEALLOCATE( CBULIST_RSV ) - END IF - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(NBULISTMAXLINES) ) - CBULIST_RSV(:) = '' - READ(UNIT=ILUSEG,NML=NAM_BU_RSV) - ELSE - ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(0) ) - END IF - - CALL POSNAM(ILUSEG,'NAM_LES',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LES) - CALL POSNAM(ILUSEG,'NAM_MEAN',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_MEAN) - CALL POSNAM(ILUSEG,'NAM_PDF',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PDF) - CALL POSNAM(ILUSEG,'NAM_FRC',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FRC) - CALL POSNAM(ILUSEG,'NAM_PARAM_ICE',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ICE) - CALL POSNAM(ILUSEG,'NAM_PARAM_C2R2',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C2R2) - CALL POSNAM(ILUSEG,'NAM_PARAM_C1R3',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C1R3) - CALL POSNAM(ILUSEG,'NAM_PARAM_LIMA',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_LIMA) - CALL POSNAM(ILUSEG,'NAM_ELEC',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ELEC) - CALL POSNAM(ILUSEG,'NAM_SERIES',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIES) - CALL POSNAM(ILUSEG,'NAM_TURB_CLOUD',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB_CLOUD) - CALL POSNAM(ILUSEG,'NAM_TURB',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB) - CALL POSNAM(ILUSEG,'NAM_CH_ORILAM',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_ORILAM) - CALL POSNAM(ILUSEG,'NAM_DUST',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DUST) - CALL POSNAM(ILUSEG,'NAM_SALT',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SALT) - CALL POSNAM(ILUSEG,'NAM_PASPOL',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PASPOL) -#ifdef MNH_FOREFIRE - CALL POSNAM(ILUSEG,'NAM_FOREFIRE',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FOREFIRE) -#endif - CALL POSNAM(ILUSEG,'NAM_CONDSAMP',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONDSAMP) - CALL POSNAM(ILUSEG,'NAM_2D_FRC',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_2D_FRC) - CALL POSNAM(ILUSEG,'NAM_LATZ_EDFLX',GFOUND) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LATZ_EDFLX) - CALL POSNAM(ILUSEG,'NAM_BLOWSNOW',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW) - CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC) -END IF -! -!------------------------------------------------------------------------------- -! -CALL TEST_NAM_VAR(ILUOUT,'CPRESOPT',CPRESOPT,'RICHA','CGRAD','CRESI','ZRESI','ZSOLV',& - 'ZGRAD') -! -CALL TEST_NAM_VAR(ILUOUT,'CUVW_ADV_SCHEME',CUVW_ADV_SCHEME, & - 'CEN4TH','CEN2ND','WENO_K' ) -CALL TEST_NAM_VAR(ILUOUT,'CMET_ADV_SCHEME',CMET_ADV_SCHEME, & - &'PPM_00','PPM_01','PPM_02') -CALL TEST_NAM_VAR(ILUOUT,'CSV_ADV_SCHEME',CSV_ADV_SCHEME, & - &'PPM_00','PPM_01','PPM_02') -CALL TEST_NAM_VAR(ILUOUT,'CTEMP_SCHEME',CTEMP_SCHEME, & - &'RK11','RK21','RK33','RKC4','RK53','RK4B','RK62','RK65','NP32','SP32','LEFR') -! -CALL TEST_NAM_VAR(ILUOUT,'CTURB',CTURB,'NONE','TKEL') -CALL TEST_NAM_VAR(ILUOUT,'CRAD',CRAD,'NONE','FIXE','ECMW',& -#ifdef MNH_ECRAD - 'ECRA',& -#endif - 'TOPA') -CALL TEST_NAM_VAR(ILUOUT,'CCLOUD',CCLOUD,'NONE','REVE','KESS', & - & 'ICE3','ICE4','C2R2','C3R5','KHKO','LIMA') -CALL TEST_NAM_VAR(ILUOUT,'CDCONV',CDCONV,'NONE','KAFR') -CALL TEST_NAM_VAR(ILUOUT,'CSCONV',CSCONV,'NONE','KAFR','EDKF') -CALL TEST_NAM_VAR(ILUOUT,'CELEC',CELEC,'NONE','ELE3','ELE4') -! -CALL TEST_NAM_VAR(ILUOUT,'CAER',CAER,'TANR','TEGE','SURF','NONE') -CALL TEST_NAM_VAR(ILUOUT,'CAOP',CAOP,'CLIM','EXPL') -CALL TEST_NAM_VAR(ILUOUT,'CLW',CLW,'RRTM','MORC') -CALL TEST_NAM_VAR(ILUOUT,'CEFRADL',CEFRADL,'PRES','OCLN','MART','C2R2','LIMA') -CALL TEST_NAM_VAR(ILUOUT,'CEFRADI',CEFRADI,'FX40','LIOU','SURI','C3R5','LIMA') -CALL TEST_NAM_VAR(ILUOUT,'COPWLW',COPWLW,'SAVI','SMSH','LILI','MALA') -CALL TEST_NAM_VAR(ILUOUT,'COPILW',COPILW,'FULI','EBCU','SMSH','FU98') -CALL TEST_NAM_VAR(ILUOUT,'COPWSW',COPWSW,'SLIN','FOUQ','MALA') -CALL TEST_NAM_VAR(ILUOUT,'COPISW',COPISW,'FULI','EBCU','FU96') -! -CALL TEST_NAM_VAR(ILUOUT,'CLBCX(1)',CLBCX(1),'CYCL','WALL','OPEN') -CALL TEST_NAM_VAR(ILUOUT,'CLBCX(2)',CLBCX(2),'CYCL','WALL','OPEN') -CALL TEST_NAM_VAR(ILUOUT,'CLBCY(1)',CLBCY(1),'CYCL','WALL','OPEN') -CALL TEST_NAM_VAR(ILUOUT,'CLBCY(2)',CLBCY(2),'CYCL','WALL','OPEN') -! -CALL TEST_NAM_VAR(ILUOUT,'CTURBDIM',CTURBDIM,'1DIM','3DIM') -CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN',CTURBLEN,'DELT','BL89','RM17','DEAR','BLKR','ADAP') -CALL TEST_NAM_VAR(ILUOUT,'CTOM',CTOM,'NONE','TM06') -CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV',CSUBG_AUCV,'NONE','CLFR','SIGM','PDF','ADJU') -CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV_RI',CSUBG_AUCV_RI,'NONE','CLFR','ADJU') -CALL TEST_NAM_VAR(ILUOUT,'CCONDENS',CCONDENS,'CB02','GAUS') -CALL TEST_NAM_VAR(ILUOUT,'CLAMBDA3',CLAMBDA3,'CB','NONE') -CALL TEST_NAM_VAR(ILUOUT,'CSUBG_MF_PDF',CSUBG_MF_PDF,'NONE','TRIANGLE') -! -CALL TEST_NAM_VAR(ILUOUT,'CCH_TDISCRETIZATION',CCH_TDISCRETIZATION, & - 'SPLIT ','CENTER ','LAGGED ') -! -CALL TEST_NAM_VAR(ILUOUT,'CCONF',CCONF,'START','RESTA') -CALL TEST_NAM_VAR(ILUOUT,'CEQNSYS',CEQNSYS,'LHE','DUR','MAE') -CALL TEST_NAM_VAR(ILUOUT,'CSPLIT',CSPLIT,'BSPLITTING','XSPLITTING','YSPLITTING') -! -CALL TEST_NAM_VAR(ILUOUT,'CBUTYPE',CBUTYPE,'NONE','CART','MASK') -! -CALL TEST_NAM_VAR(ILUOUT,'CRELAX_HEIGHT_TYPE',CRELAX_HEIGHT_TYPE,'FIXE','THGR') -! -CALL TEST_NAM_VAR(ILUOUT,'CLES_NORM_TYPE',CLES_NORM_TYPE,'NONE','CONV','EKMA','MOBU') -CALL TEST_NAM_VAR(ILUOUT,'CBL_HEIGHT_DEF',CBL_HEIGHT_DEF,'TKE','KE','WTV','FRI','DTH') -CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN_CLOUD',CTURBLEN_CLOUD,'NONE','DEAR','DELT','BL89') -! -! The test on the mass flux scheme for shallow convection -! -CALL TEST_NAM_VAR(ILUOUT,'CMF_UPDRAFT',CMF_UPDRAFT,'NONE','EDKF','RHCJ') -CALL TEST_NAM_VAR(ILUOUT,'CMF_CLOUD',CMF_CLOUD,'NONE','STAT','DIRE') -! -! The test on the CSOLVER name is made elsewhere -! -CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE',CPRISTINE_ICE,'PLAT','COLU','BURO') -CALL TEST_NAM_VAR(ILUOUT,'CSEDIM',CSEDIM,'SPLI','STAT','NONE') -IF( CCLOUD == 'C3R5' ) THEN - CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE_C1R3',CPRISTINE_ICE_C1R3, & - 'PLAT','COLU','BURO') - CALL TEST_NAM_VAR(ILUOUT,'CHEVRIMED_ICE_C1R3',CHEVRIMED_ICE_C1R3, & - 'GRAU','HAIL') -END IF -! -IF( CCLOUD == 'LIMA' ) THEN - CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE_LIMA',CPRISTINE_ICE_LIMA, & - 'PLAT','COLU','BURO') - CALL TEST_NAM_VAR(ILUOUT,'CHEVRIMED_ICE_LIMA',CHEVRIMED_ICE_LIMA, & - 'GRAU','HAIL') -END IF -IF(LBLOWSNOW) THEN - CALL TEST_NAM_VAR(ILUOUT,'CSNOWSEDIM',CSNOWSEDIM,'NONE','MITC','CARR','TABC') - IF (XALPHA_SNOW .NE. 3 .AND. CSNOWSEDIM=='TABC') THEN - WRITE(ILUOUT,*) '*****************************************' - WRITE(ILUOUT,*) '* XALPHA_SNW must be set to 3 when ' - WRITE(ILUOUT,*) '* CSNOWSEDIM = TABC ' - WRITE(ILUOUT,*) '* Update the look-up table in BLOWSNOW_SEDIM_LKT1D ' - WRITE(ILUOUT,*) '* to use TABC with a different value of XEMIALPHA_SNW' - WRITE(ILUOUT,*) '*****************************************' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - ENDIF -END IF -! -!-------------------------------------------------------------------------------! -!* 2. FIRST INITIALIZATIONS -! --------------------- -! -!* 2.1 Time step in gridnesting case -! -IF (KMI /= 1 .AND. NDAD(KMI) /= KMI) THEN - XTSTEP = PTSTEP_ALL(NDAD(KMI)) / NDTRATIO(KMI) -END IF -PTSTEP_ALL(KMI) = XTSTEP -! -!* 2.2 Fill the global configuration module -! -! Check coherence between the microphysical scheme and water species and -!initialize the logicals LUSERn -! -SELECT CASE ( CCLOUD ) - CASE ( 'NONE' ) - IF (.NOT. ( (.NOT. LUSERC) .AND. (.NOT. LUSERR) .AND. (.NOT. LUSERI) .AND. & - (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH) & - ) .AND. CPROGRAM=='MESONH' ) THEN -! - LUSERC=.FALSE. - LUSERR=.FALSE.; LUSERI=.FALSE. - LUSERS=.FALSE.; LUSERG=.FALSE. - LUSERH=.FALSE. -! - END IF -! - IF (CSUBG_AUCV == 'SIGM') THEN -! - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE THE SUBGRID AUTOCONVERSION SCHEME ' - WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT MICROPHYSICS' - WRITE(UNIT=ILUOUT,FMT=*) ' CSUBG_AUCV IS PUT TO "NONE"' -! - CSUBG_AUCV = 'NONE' -! - END IF -! - CASE ( 'REVE' ) - IF (.NOT. ( LUSERV .AND. LUSERC .AND. (.NOT. LUSERR) .AND. (.NOT. LUSERI) & - .AND. (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH) & - ) ) THEN -! - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A REVERSIBLE MICROPHYSICAL " ,& - &" SCHEME. YOU WILL ONLY HAVE VAPOR AND CLOUD WATER ",/, & - &" LUSERV AND LUSERC ARE TO TRUE AND THE OTHERS TO FALSE ")') -! - LUSERV=.TRUE. ; LUSERC=.TRUE. - LUSERR=.FALSE.; LUSERI=.FALSE. - LUSERS=.FALSE.; LUSERG=.FALSE. - LUSERH=.FALSE. - END IF -! - IF (CSUBG_AUCV == 'SIGM') THEN -! - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH A REVERSIBLE MICROPHYSICAL SCHEME ' - WRITE(UNIT=ILUOUT,FMT=*) ' AND THE SUBGRID AUTOCONVERSION SCHEME ' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT YOU DO NOT HAVE RAIN in the "REVE" SCHEME' - WRITE(UNIT=ILUOUT,FMT=*) ' CSUBG_AUCV IS PUT TO "NONE"' -! - CSUBG_AUCV = 'NONE' -! - END IF -! - CASE ( 'KESS' ) - IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. (.NOT. LUSERI) .AND. & - (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH) & - ) ) THEN -! - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A KESSLER MICROPHYSICAL " , & - &" SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER AND RAIN ",/, & - &" LUSERV, LUSERC AND LUSERR ARE SET TO TRUE AND THE OTHERS TO FALSE ")') -! - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.FALSE.; LUSERS=.FALSE. - LUSERG=.FALSE.; LUSERH=.FALSE. - END IF -! - IF (CSUBG_AUCV == 'SIGM') THEN -! - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH A KESSLER MICROPHYSICAL SCHEME ' - WRITE(UNIT=ILUOUT,FMT=*) ' AND THE SUBGRID AUTOCONVERSION SCHEME USING' - WRITE(UNIT=ILUOUT,FMT=*) 'SIGMA_RC.' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE.' - WRITE(UNIT=ILUOUT,FMT=*) 'SET CSUBG_AUCV TO "CLFR" or "NONE" OR CCLOUD TO "ICE3"' -! - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - CASE ( 'ICE3' ) - IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. LUSECI & - .AND. LUSERS .AND. LUSERG .AND. (.NOT. LUSERH)) & - .AND. CPROGRAM=='MESONH' ) THEN - ! - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE THE ice3 SIMPLE MIXED PHASE' - WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYSICAL SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER,' - WRITE(UNIT=ILUOUT,FMT=*) 'RAIN WATER, CLOUD ICE (MIXING RATIO AND CONCENTRATION)' - WRITE(UNIT=ILUOUT,FMT=*) 'SNOW-AGGREGATES AND GRAUPELN.' - WRITE(UNIT=ILUOUT,FMT=*) 'LUSERV,LUSERC,LUSERR,LUSERI,LUSECI,LUSERS,LUSERG ARE SET TO TRUE' - WRITE(UNIT=ILUOUT,FMT=*) 'AND LUSERH TO FALSE' -! - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.TRUE. ; LUSECI=.TRUE. - LUSERS=.TRUE. ; LUSERG=.TRUE. - LUSERH=.FALSE. - END IF -! - IF (CSUBG_AUCV == 'SIGM' .AND. .NOT. LSUBG_COND) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID AUTOCONVERSION SCHEME' - WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT THE SUBGRID CONDENSATION SCHEME.' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: CSUBG_AUCV is SET to NONE' - CSUBG_AUCV='NONE' - END IF -! - IF (CSUBG_AUCV == 'CLFR' .AND. CSCONV /= 'EDKF') THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID AUTOCONVERSION SCHEME' - WRITE(UNIT=ILUOUT,FMT=*) 'WITH THE CONVECTIVE CLOUD FRACTION WITHOUT EDKF' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: CSUBG_AUCV is SET to NONE' - CSUBG_AUCV='NONE' - END IF -! - CASE ( 'ICE4' ) - IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. LUSECI & - .AND. LUSERS .AND. LUSERG .AND. LUSERH) & - .AND. CPROGRAM=='MESONH' ) THEN - ! - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE THE ice4 SIMPLE MIXED PHASE' - WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYSICAL SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER,' - WRITE(UNIT=ILUOUT,FMT=*) 'RAIN WATER, CLOUD ICE (MIXING RATIO AND CONCENTRATION)' - WRITE(UNIT=ILUOUT,FMT=*) 'SNOW-AGGREGATES, GRAUPELN AND HAILSTONES.' - WRITE(UNIT=ILUOUT,FMT=*) 'LUSERV,LUSERC,LUSERR,LUSERI,LUSECI,LUSERS,LUSERG' - WRITE(UNIT=ILUOUT,FMT=*) 'AND LUSERH ARE SET TO TRUE' -! - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.TRUE. ; LUSECI=.TRUE. - LUSERS=.TRUE. ; LUSERG=.TRUE. ; LUSERH=.TRUE. - END IF -! - IF (CSUBG_AUCV /= 'NONE' .AND. .NOT. LSUBG_COND) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID AUTOCONVERSION SCHEME' - WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT THE SUBGRID CONDENSATION SCHEME.' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: CSUBG_AUCV is SET to NONE' - CSUBG_AUCV='NONE' - END IF -! - CASE ( 'C2R2','C3R5', 'KHKO' ) - IF (( EPARAM_CCN == 'XXX') .OR. (EINI_CCN == 'XXX')) THEN - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ", & - &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_C2R2", & - &" YOU HAVE TO FILL HPARAM_CCN and HINI_CCN ")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - IF (HCLOUD == 'NONE') THEN - CGETCLOUD = 'SKIP' - ELSE IF (HCLOUD == 'REVE' ) THEN - CGETCLOUD = 'INI1' - ELSE IF (HCLOUD == 'KESS' ) THEN - CGETCLOUD = 'INI2' - ELSE IF (HCLOUD == 'ICE3' ) THEN - IF (CCLOUD == 'C3R5') THEN - CGETCLOUD = 'INI2' - ELSE - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE WARM MICROPHYSICAL ", & - &" SCHEME BUT YOU WERE USING THE ICE3 SCHEME PREVIOUSLY.",/, & - &" AS THIS IS A LITTLE BIT STUPID IT IS NOT AUTHORIZED !!!")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - ELSE - CGETCLOUD = 'READ' ! This is automatically done - END IF -! - IF ((CCLOUD == 'C2R2' ).OR. (CCLOUD == 'KHKO' )) THEN - IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. (.NOT. LUSERI) .AND. & - (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH) & - ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE C2R2 MICROPHYSICAL ", & - &" SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER AND RAIN ",/, & - &"LUSERV, LUSERC AND LUSERR ARE SET TO TRUE AND THE OTHERS TO FALSE ")') -! - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.FALSE.; LUSERS=.FALSE. - LUSERG=.FALSE.; LUSERH=.FALSE. - END IF - ELSE IF (CCLOUD == 'C3R5') THEN - IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. & - LUSERS .AND. LUSERG .AND. (.NOT. LUSERH) & - ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE C3R5 MICROPHYS. SCHEME.",& - &" YOU WILL HAVE VAPOR, CLOUD WATER/ICE, RAIN, SNOW AND GRAUPEL ",/, & - &"LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG ARE SET TO TRUE")' ) -! - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.TRUE. ; LUSECI=.TRUE. - LUSERS=.TRUE. ; LUSERG=.TRUE. - LUSERH=.FALSE. - END IF - ELSE IF (CCLOUD == 'LIMA') THEN - IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. & - LUSERS .AND. LUSERG .AND. (.NOT. LUSERH) & - ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LIMA MICROPHYS. SCHEME.",& - &" YOU WILL HAVE VAPOR, CLOUD WATER/ICE, RAIN, SNOW AND GRAUPEL ",/, & - &"LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG ARE SET TO TRUE")' ) -! - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.TRUE. ; LUSECI=.TRUE. - LUSERS=.TRUE. ; LUSERG=.TRUE. - LUSERH=.FALSE. - END IF - END IF -! - IF (LSUBG_COND) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE SIMPLE MIXED PHASE' - WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYS. SCHEME AND THE SUBGRID COND. SCHEME.' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE.' - WRITE(UNIT=ILUOUT,FMT=*) 'SET LSUBG_COND TO FALSE OR CCLOUD TO "REVE", "KESS"' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF ( CEFRADL /= 'C2R2') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=C2R2 FOR RADIATION' - WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=C2R2 ' - WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME' - END IF -! - IF ( CCLOUD == 'C3R5' .AND. CEFRADI /= 'C3R5') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADI=C3R5 FOR RADIATION' - WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADI=C3R5 ' - WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME' - END IF -! - IF ( WALPHAC /= 3.0 .OR. WNUC /= 2.0) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'IT IS ADVISED TO USE XALPHAC=3. and XNUC=2.' - WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS WITH KHKO SCHEME. ' - END IF -! - IF ( CEFRADL /= 'C2R2') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=C2R2 FOR RADIATION' - WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=C2R2 ' - WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME' - END IF -! - CASE ( 'LIMA') - IF ((LACTI .AND. FINI_CCN == 'XXX')) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ", & - &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_LIMA", & - &" YOU HAVE TO FILL FINI_CCN ")') - call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' ) - END IF -! - IF(LACTI .AND. NMOD_CCN == 0) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("ACTIVATION OF AEROSOL PARTICLES IS NOT ", & - &"POSSIBLE IF NMOD_CCN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER ", & - &"VALUE OF NMOD_CCN IN ORDER TO USE LIMA WARM ACTIVATION SCHEME.")') - call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' ) - END IF -! - IF(LNUCL .AND. NMOD_IFN == 0 .AND. (.NOT.LMEYERS)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("NUCLEATION BY DEPOSITION AND CONTACT IS NOT ", & - &"POSSIBLE IF NMOD_IFN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER", & - &"VALUE OF NMOD_IFN IN ORDER TO USE LIMA COLD NUCLEATION SCHEME.")') - END IF -! - IF (HCLOUD == 'NONE') THEN - CGETCLOUD = 'SKIP' - ELSE IF (HCLOUD == 'REVE' ) THEN - CGETCLOUD = 'INI1' - ELSE IF (HCLOUD == 'KESS' ) THEN - CGETCLOUD = 'INI2' - ELSE IF (HCLOUD == 'ICE3' ) THEN - CGETCLOUD = 'INI2' - ELSE - CGETCLOUD = 'READ' ! This is automatically done - END IF -! - IF (LWARM) THEN - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.FALSE.; LUSERS=.FALSE. ; LUSERG=.FALSE.; LUSERH=.FALSE. - END IF -! - IF (LCOLD) THEN - LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE. - LUSERI=.TRUE. ; LUSERS=.TRUE. ; LUSERG=.TRUE. - LUSERH=LHAIL - END IF -! -!!$ IF (LSUBG_COND .AND. LCOLD) THEN -!!$ WRITE(UNIT=ILUOUT,FMT=9003) KMI -!!$ WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE SIMPLE MIXED PHASE' -!!$ WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYS. SCHEME AND THE SUBGRID COND. SCHEME.' -!!$ WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LSUBG_COND ' -!!$ WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "REVE", "KESS" ' -!!$ !callabortstop -!!$ CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -!!$ END IF -! - IF (CCLOUD == 'LIMA' .AND. LSUBG_COND .AND. (.NOT. LPTSPLIT)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU MUST USE LPTSPLIT=T with CCLOUD=LIMA' - WRITE(UNIT=ILUOUT,FMT=*) 'AND LSUBG_COND ' - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','use LPTSPLIT=T with LIMA and LSUBG_COND=T') - END IF -! - IF ( XALPHAC /= 3.0 .OR. XNUC /= 2.0) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'IT IS ADVISED TO USE XALPHAC=3. and XNUC=2.' - WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS. ' - END IF -! - IF ( CEFRADL /= 'LIMA') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=LIMA FOR RADIATION' - WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=LIMA ' - WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME "LIMA"' - END IF - - IF (LUSECHEM ) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LUSECHEM ' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - IF (LDUST ) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND DUSTS ' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LDUST ' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - IF (LSALT ) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND SEA SALTS ' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LSALT ' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! -END SELECT -! -LUSERV_G(KMI) = LUSERV -LUSERC_G(KMI) = LUSERC -LUSERR_G(KMI) = LUSERR -LUSERI_G(KMI) = LUSERI -LUSERS_G(KMI) = LUSERS -LUSERG_G(KMI) = LUSERG -LUSERH_G(KMI) = LUSERH -LUSETKE(KMI) = (CTURB /= 'NONE') -! -!------------------------------------------------------------------------------- -! -!* 2.3 Chemical and NSV_* variables initializations -! -CALL UPDATE_NAM_IBM_PARAMN -CALL UPDATE_NAM_RECYCL_PARAMN -CALL UPDATE_NAM_PARAMN -CALL UPDATE_NAM_DYNN -CALL UPDATE_NAM_CONFN -! -IF (LORILAM .AND. .NOT. LUSECHEM) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU CANNOT USE ORILAM AEROSOL SCHEME WITHOUT ' - WRITE(ILUOUT,FMT=*) 'CHEMICAL GASEOUS CHEMISTRY ' - WRITE(ILUOUT,FMT=*) 'THEREFORE LUSECHEM IS SET TO TRUE ' - LUSECHEM=.TRUE. -END IF -! -IF (LUSECHAQ.AND.(.NOT.LUSECHEM)) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE AQUEOUS PHASE CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT THE CHEMISTRY IS NOT ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHEM TO TRUE IF YOU WANT REALLY USE CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'OR SET LUSECHAQ TO FALSE IF YOU DO NOT WANT USE IT' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -IF (LUSECHAQ.AND.(.NOT.LUSERC).AND.CPROGRAM=='MESONH') THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE AQUEOUS PHASE CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT CLOUD MICROPHYSICS IS NOT ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'LUSECHAQ IS SET TO FALSE' - LUSECHAQ = .FALSE. -END IF -IF (LUSECHAQ.AND.CCLOUD(1:3) == 'ICE'.AND. .NOT. LUSECHIC) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE AQUEOUS PHASE CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'WITH MIXED PHASE CLOUD MICROPHYSICS' - WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHIC TO TRUE IF YOU WANT TO ACTIVATE' - WRITE(UNIT=ILUOUT,FMT=*) 'ICE PHASE CHEMICAL SPECIES' - IF (LCH_RET_ICE) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'LCH_RET_ICE TRUE MEANS ALL SOLUBLE' - WRITE(UNIT=ILUOUT,FMT=*) 'GASES ARE RETAINED IN ICE PHASE' - WRITE(UNIT=ILUOUT,FMT=*) 'WHEN SUPERCOOLED WATER FREEZES' - ELSE - WRITE(UNIT=ILUOUT,FMT=*) 'LCH_RET_ICE FALSE MEANS ALL SOLUBLE' - WRITE(UNIT=ILUOUT,FMT=*) 'GASES GO BACK TO THE GAS PHASE WHEN' - WRITE(UNIT=ILUOUT,FMT=*) 'SUPERCOOLED WATER FREEZES' - ENDIF -ENDIF -IF (LUSECHIC.AND. .NOT. CCLOUD(1:3) == 'ICE'.AND.CPROGRAM=='MESONH') THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE ICE PHASE CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT MIXED PHASE CLOUD MICROPHYSICS IS NOT ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'LUSECHIC IS SET TO FALSE' - LUSECHIC= .FALSE. -ENDIF -IF (LCH_PH.AND. (.NOT. LUSECHAQ)) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'DIAGNOSTIC PH COMPUTATION IS ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT AQUEOUS PHASE CHEMISTRY IS NOT ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHAQ TO TRUE IF YOU WANT TO ACTIVATE IT' - WRITE(UNIT=ILUOUT,FMT=*) 'LCH_PH IS SET TO FALSE' - LCH_PH= .FALSE. -ENDIF -IF (LUSECHIC.AND.(.NOT.LUSECHAQ)) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE ICE PHASE CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT THE AQUEOUS PHASE CHEMISTRY IS NOT ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHAQ TO TRUE IF YOU WANT REALLY USE CLOUD CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'OR SET LUSECHIC TO FALSE IF YOU DO NOT WANT USE IT' -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -IF ((LUSECHIC).AND.(LCH_RET_ICE)) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE RETENTION OF SOLUBLE GASES IN ICE' - WRITE(UNIT=ILUOUT,FMT=*) 'BUT THE ICE PHASE CHEMISTRY IS ACTIVATED' - WRITE(UNIT=ILUOUT,FMT=*) 'FLAG LCH_RET_ICE IS ONLY USES WHEN LUSECHIC IS SET' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE IE NO CHEMICAL SPECIES IN ICE' -ENDIF -! -CALL UPDATE_NAM_CH_MNHCN -CALL INI_NSV(KMI) -! -! From this point, all NSV* variables contain valid values for model KMI -! -DO JSV = 1,NSV - LUSESV(JSV,KMI) = .TRUE. -END DO -! -IF ( CAOP=='EXPL' .AND. .NOT.LDUST .AND. .NOT.LORILAM & - .AND. .NOT.LSALT .AND. .NOT.(CCLOUD=='LIMA') ) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) ' YOU WANT TO USE EXPLICIT AEROSOL OPTICAL ' - WRITE(UNIT=ILUOUT,FMT=*) 'PROPERTIES BUT YOU DONT HAVE DUST OR ' - WRITE(UNIT=ILUOUT,FMT=*) 'AEROSOL OR SALT THEREFORE CAOP=CLIM' - CAOP='CLIM' -END IF -!------------------------------------------------------------------------------- -! -!* 3. CHECK COHERENCE BETWEEN EXSEG VARIABLES AND FMFILE ATTRIBUTES -! ------------------------------------------------------------- -! -! -!* 3.1 Turbulence variable -! -IF ((CTURB /= 'NONE').AND.(HTURB == 'NONE')) THEN - CGETTKET ='INIT' - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*)'YOU WANT TO USE TURBULENCE KINETIC ENERGY TKE' - WRITE(UNIT=ILUOUT,FMT=*)'WHEREAS IT IS NOT IN INITIAL FMFILE' - WRITE(UNIT=ILUOUT,FMT=*)'TKE WILL BE INITIALIZED TO ZERO' -ELSE - IF (CTURB /= 'NONE') THEN - CGETTKET ='READ' - IF ((CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETTKET='INIT' - ELSE - CGETTKET ='SKIP' - END IF -END IF -! -! -IF ((CTOM == 'TM06').AND.(HTOM /= 'TM06')) THEN - CGETBL_DEPTH ='INIT' - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*)'YOU WANT TO USE BL DEPTH FOR THIRD ORDER MOMENTS' - WRITE(UNIT=ILUOUT,FMT=*)'WHEREAS IT IS NOT IN INITIAL FMFILE' - WRITE(UNIT=ILUOUT,FMT=*)'IT WILL BE INITIALIZED TO ZERO' -ELSE - IF (CTOM == 'TM06') THEN - CGETBL_DEPTH ='READ' - ELSE - CGETBL_DEPTH ='SKIP' - END IF -END IF -! -IF (LRMC01 .AND. .NOT. ORMC01) THEN - CGETSBL_DEPTH ='INIT' - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*)'YOU WANT TO USE SBL DEPTH FOR RMC01' - WRITE(UNIT=ILUOUT,FMT=*)'WHEREAS IT IS NOT IN INITIAL FMFILE' - WRITE(UNIT=ILUOUT,FMT=*)'IT WILL BE INITIALIZED TO ZERO' -ELSE - IF (LRMC01) THEN - CGETSBL_DEPTH ='READ' - ELSE - CGETSBL_DEPTH ='SKIP' - END IF -END IF -! -! -!* 3.2 Moist variables -! -IF (LUSERV.AND. (.NOT.OUSERV)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE VAPOR VARIABLE Rv WHEREAS IT ", & - & "IS NOT IN INITIAL FMFILE",/, & - & "Rv WILL BE INITIALIZED TO ZERO")') - CGETRVT='INIT' -ELSE - IF (LUSERV) THEN - CGETRVT='READ' - ELSE - CGETRVT='SKIP' - END IF -END IF -! -IF (LUSERC.AND. (.NOT.OUSERC)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE CLOUD VARIABLE Rc WHEREAS IT ", & - & " IS NOT IN INITIAL FMFILE",/, & - & "Rc WILL BE INITIALIZED TO ZERO")') - CGETRCT='INIT' -ELSE - IF (LUSERC) THEN - CGETRCT='READ' -! IF(CCONF=='START') CGETRCT='INIT' - ELSE - CGETRCT='SKIP' - END IF -END IF -! -IF (LUSERR.AND. (.NOT.OUSERR)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE RAIN VARIABLE Rr WHEREAS IT ", & - & "IS NOT IN INITIAL FMFILE",/, & - & " Rr WILL BE INITIALIZED TO ZERO")') - - CGETRRT='INIT' -ELSE - IF (LUSERR) THEN - CGETRRT='READ' -! IF( (CCONF=='START').AND. CPROGRAM /= 'DIAG') CGETRRT='INIT' - ELSE - CGETRRT='SKIP' - END IF -END IF -! -IF (LUSERI.AND. (.NOT.OUSERI)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE ICE VARIABLE Ri WHEREAS IT ", & - & "IS NOT IN INITIAL FMFILE",/, & - & " Ri WILL BE INITIALIZED TO ZERO")') - CGETRIT='INIT' -ELSE - IF (LUSERI) THEN - CGETRIT='READ' -! IF(CCONF=='START') CGETRIT='INIT' - ELSE - CGETRIT='SKIP' - END IF -END IF -! -IF (LUSECI.AND. (.NOT.OUSECI)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE ICE CONC. VARIABLE Ci WHEREAS IT ",& - & "IS NOT IN INITIAL FMFILE",/, & - & " Ci WILL BE INITIALIZED TO ZERO")') - CGETCIT='INIT' -ELSE - IF (LUSECI) THEN - CGETCIT='READ' - ELSE - CGETCIT='SKIP' - END IF -END IF -! -IF (LUSERS.AND. (.NOT.OUSERS)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE SNOW VARIABLE Rs WHEREAS IT ",& - & "IS NOT IN INITIAL FMFILE",/, & - & " Rs WILL BE INITIALIZED TO ZERO")') - CGETRST='INIT' -ELSE - IF (LUSERS) THEN - CGETRST='READ' -! IF ( (CCONF=='START').AND. CPROGRAM /= 'DIAG') CGETRST='INIT' - ELSE - CGETRST='SKIP' - END IF -END IF -! -IF (LUSERG.AND. (.NOT.OUSERG)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE GRAUPEL VARIABLE Rg WHEREAS ",& - & " IT IS NOTIN INITIAL FMFILE",/, & - & "Rg WILL BE INITIALIZED TO ZERO")') - CGETRGT='INIT' -ELSE - IF (LUSERG) THEN - CGETRGT='READ' -! IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETRGT='INIT' - ELSE - CGETRGT='SKIP' - END IF -END IF -! -IF (LUSERH.AND. (.NOT.OUSERH)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE HAIL VARIABLE Rh WHEREAS",& - & "IT IS NOT IN INITIAL FMFILE",/, & - & " Rh WILL BE INITIALIZED TO ZERO")') - CGETRHT='INIT' -ELSE - IF (LUSERH) THEN - CGETRHT='READ' -! IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETRHT='INIT' - ELSE - CGETRHT='SKIP' - END IF -END IF -! -IF (LUSERC.AND. (.NOT.OUSERC)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'THE CLOUD FRACTION WILL BE INITIALIZED ACCORDING' - WRITE(UNIT=ILUOUT,FMT=*) 'TO CLOUD MIXING RATIO VALUE OR SET TO 0' - CGETCLDFR = 'INIT' -ELSE - IF ( LUSERC ) THEN - CGETCLDFR = 'READ' - IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETCLDFR='INIT' - ELSE - CGETCLDFR = 'SKIP' - END IF -END IF -! -IF(CTURBLEN=='RM17' .OR. CTURBLEN=='ADAP') THEN - XCEDIS=0.34 -ELSE - XCEDIS=0.84 -END IF -! -!* 3.3 Moist turbulence -! -IF ( LUSERC .AND. CTURB /= 'NONE' ) THEN - IF ( .NOT. (OUSERC .AND. HTURB /= 'NONE') ) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE MOIST TURBULENCE WHEREAS IT ",/, & - & " WAS NOT THE CASE FOR THE INITIAL FMFILE GENERATION",/, & - & "SRC AND SIGS ARE INITIALIZED TO 0")') - CGETSRCT ='INIT' - CGETSIGS ='INIT' - ELSE - CGETSRCT ='READ' - IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETSRCT ='INIT' - CGETSIGS ='READ' - END IF -ELSE - CGETSRCT ='SKIP' - CGETSIGS ='SKIP' -END IF -! -IF(NMODEL_CLOUD==KMI .AND. CTURBLEN_CLOUD/='NONE') THEN - IF (CTURB=='NONE' .OR. .NOT.LUSERC) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO COMPUTE A MIXING LENGTH FOR CLOUD=", & - & A4,/, & - & ", WHEREAS YOU DO NOT SPECIFY A TURBULENCE SCHEME OR ", & - & "USE OF RC,",/," CTURBLEN_CLOUD IS SET TO NONE")') & - CTURBLEN_CLOUD - CTURBLEN_CLOUD='NONE' - END IF - IF( XCEI_MIN > XCEI_MAX ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("PROBLEM OF CEI LIMITS FOR CLOUD MIXING ",/, & - & "LENGTH COMPUTATION: XCEI_MIN=",E9.3,", XCEI_MAX=",E9.3)')& - XCEI_MIN,XCEI_MAX - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -END IF -! -IF ( LSIGMAS ) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE SIGMA_S FROM TURBULENCE SCHEME",/, & - & " IN ICE SUBGRID CONDENSATION, SO YOUR SIGMA_S"/, & - & " MIGHT BE SMALL ABOVE PBL DEPENDING ON LENGTH SCALE")') -END IF -! -IF (LSUBG_COND .AND. CTURB=='NONE' ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID CONDENSATION' - WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT TURBULENCE ' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: LSUBG_COND is SET to FALSE' - LSUBG_COND=.FALSE. -END IF -! -IF (L1D .AND. CTURB/='NONE' .AND. CTURBDIM == '3DIM') THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE 3D TURBULENCE IN 1D CONFIGURATION ' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT POSSIBLE: CTURBDIM IS SET TO 1DIM' - CTURBDIM = '1DIM' -END IF -! -!* 3.4 Additional scalar variables -! -IF (NSV_USER == KSV_USER) THEN - DO JS = 1,KSV_USER ! to read all the variables in initial file - CGETSVT(JS)='READ' ! and to initialize them -! IF(CCONF=='START')CGETSVT(JS)='INIT' ! with these values - END DO -ELSEIF (NSV_USER > KSV_USER) THEN - IF (KSV_USER == 0) THEN - CGETSVT(1:NSV_USER)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE MORE ADDITIONAL SCALAR " ,& - &" VARIABLES THAN THERE ARE IN INITIAL FMFILE",/, & - & "THE SUPPLEMENTARY VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - DO JS = 1,KSV_USER ! to read all the variables in initial file - CGETSVT(JS)='READ' ! and to initialize them -! IF(CCONF=='START')CGETSVT(JS)='INIT' ! with these values - END DO - DO JS = KSV_USER+1, NSV_USER ! to initialize to zero supplementary - CGETSVT(JS)='INIT' ! initial file) - END DO - END IF -ELSE - WRITE(UNIT=ILUOUT,FMT=9000) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE LESS ADDITIONAL SCALAR " ,& - &" VARIABLES THAN THERE ARE IN INITIAL FMFILE")') - DO JS = 1,NSV_USER ! to read the first NSV_USER variables in initial file - CGETSVT(JS)='READ' ! and to initialize with these values -! IF(CCONF=='START') CGETSVT(JS)='INIT' - END DO - DO JS = NSV_USER + 1, KSV_USER ! to skip the last (KSV_USER-NSV_USER) variables - CGETSVT(JS)='SKIP' - END DO -END IF -! -! C2R2 and KHKO SV case -! -IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN - IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN - CGETSVT(NSV_C2R2BEG:NSV_C2R2END)='READ' -! IF(CCONF=='START') CGETSVT(NSV_C2R2BEG:NSV_C2R2END)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR C2R2 & - & (or KHKO) SCHEME IN INITIAL FMFILE",/,& - & "THE C2R2 (or KHKO) VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_C2R2BEG:NSV_C2R2END)='INIT' - END IF -END IF -! -! C3R5 SV case -! -IF (CCLOUD == 'C3R5') THEN - IF (HCLOUD == 'C3R5') THEN - CGETSVT(NSV_C1R3BEG:NSV_C1R3END)='READ' -! IF(CCONF=='START') CGETSVT(NSV_C1R3BEG:NSV_C1R3END)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR C3R5 & - &SCHEME IN INITIAL FMFILE",/,& - & "THE C1R3 VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_C1R3BEG:NSV_C1R3END)='INIT' - END IF -END IF -! -! LIMA SV case -! -IF (CCLOUD == 'LIMA') THEN - IF (HCLOUD == 'LIMA') THEN - CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='READ' -!!JPP IF(HSTORAGE_TYPE=='TT') CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LIMA & - & SCHEME IN INITIAL FMFILE",/,& - & "THE LIMA VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT' - END IF -END IF -! -! Electrical SV case -! -IF (CELEC /= 'NONE') THEN - IF (HELEC /= 'NONE') THEN - CGETSVT(NSV_ELECBEG:NSV_ELECEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_ELECBEG:NSV_ELECEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR ELECTRICAL & - &SCHEME IN INITIAL FMFILE",/,& - & "THE ELECTRICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_ELECBEG:NSV_ELECEND)='INIT' - END IF -END IF -! -! (explicit) LINOx SV case -! -IF (CELEC /= 'NONE' .AND. LLNOX_EXPLICIT) THEN - IF (HELEC /= 'NONE' .AND. OLNOX_EXPLICIT) THEN - CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='READ' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LINOX & - & IN INITIAL FMFILE",/,& - & "THE LINOX VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='INIT' - END IF -END IF -! -! Chemical SV case (excluding aqueous chemical species) -! -IF (LUSECHEM) THEN - IF (OUSECHEM) THEN - CGETSVT(NSV_CHGSBEG:NSV_CHGSEND)='READ' - IF(CCONF=='START' .AND. LCH_INIT_FIELD ) CGETSVT(NSV_CHGSBEG:NSV_CHGSEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR CHEMICAL & - &SCHEME IN INITIAL FMFILE",/,& - & "THE CHEMICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_CHGSBEG:NSV_CHGSEND)='INIT' - END IF -END IF -! add aqueous chemical species -IF (LUSECHAQ) THEN - IF (OUSECHAQ) THEN - CGETSVT(NSV_CHACBEG:NSV_CHACEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_CHACBEG:NSV_CHACEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR CHEMICAL & - &SCHEME IN AQUEOUS PHASE IN INITIAL FMFILE",/,& - & "THE AQUEOUS PHASE CHEMICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_CHACBEG:NSV_CHACEND)='INIT' - END IF -END IF -! add ice phase chemical species -IF (LUSECHIC) THEN - IF (OUSECHIC) THEN - CGETSVT(NSV_CHICBEG:NSV_CHICEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_CHICBEG:NSV_CHICEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR CHEMICAL & - &SPECIES IN ICE PHASE IN INITIAL FMFILE",/,& - & "THE ICE PHASE CHEMICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_CHICBEG:NSV_CHICEND)='INIT' - END IF -END IF -! pH values = diagnostics -IF (LCH_PH .AND. .NOT. OCH_PH) THEN - CGETPHC ='INIT' !will be initialized to XCH_PHINIT - IF (LUSERR) THEN - CGETPHR = 'INIT' !idem - ELSE - CGETPHR = 'SKIP' - ENDIF -ELSE - IF (LCH_PH) THEN - CGETPHC ='READ' - IF (LUSERR) THEN - CGETPHR = 'READ' - ELSE - CGETPHR = 'SKIP' - ENDIF - ELSE - CGETPHC ='SKIP' - CGETPHR ='SKIP' - END IF -END IF -! -! Dust case -! -IF (LDUST) THEN - IF (ODUST) THEN - CGETSVT(NSV_DSTBEG:NSV_DSTEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_DSTBEG:NSV_DSTEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR DUST & - &SCHEME IN INITIAL FMFILE",/,& - & "THE DUST VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_DSTBEG:NSV_DSTEND)='INIT' - END IF - IF (LDEPOS_DST(KMI)) THEN - - IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')& - .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & - (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL')) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF DUST IS ONLY CODED FOR THE",/,& - & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO and C2R2")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - - IF (ODEPOS_DST(KMI) ) THEN - CGETSVT(NSV_DSTDEPBEG:NSV_DSTDEPEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_DSTDEPBEG:NSV_DSTDEPEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and CLOUD DUST & - & SCHEME IN INITIAL FMFILE",/,& - & "THE MOIST DUST VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_DSTDEPBEG:NSV_DSTDEPEND)='INIT' - END IF - END IF - - IF(NMODE_DST.GT.3 .OR. NMODE_DST.LT.1) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("DUST MODES MUST BE BETWEEN 1 and 3 ")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -END IF -! -! Sea Salt case -! -IF (LSALT) THEN - IF (OSALT) THEN - CGETSVT(NSV_SLTBEG:NSV_SLTEND)='READ' - CGETZWS='READ' -! IF(CCONF=='START') CGETSVT(NSV_SLTBEG:NSV_SLTEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR SALT & - &SCHEME IN INITIAL FMFILE",/,& - & "THE SALT VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_SLTBEG:NSV_SLTEND)='INIT' - CGETZWS='INIT' - END IF - IF (LDEPOS_SLT(KMI)) THEN - - IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')& - .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & - (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL')) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF SEA SALT AEROSOLS IS ONLY CODED FOR THE",/,& - & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO and C2R2")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - - IF (ODEPOS_SLT(KMI) ) THEN - CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and CLOUD SEA SALT & - & SCHEME IN INITIAL FMFILE",/,& - & "THE MOIST SEA SALT VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT' - END IF - END IF - IF(NMODE_SLT.GT.5 .OR. NMODE_SLT.LT.1) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 5 ")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -END IF -! -! Orilam SV case -! -IF (LORILAM) THEN - IF (OORILAM) THEN - CGETSVT(NSV_AERBEG:NSV_AEREND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_AERBEG:NSV_AEREND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR AEROSOL & - &SCHEME IN INITIAL FMFILE",/,& - & "THE AEROSOLS VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_AERBEG:NSV_AEREND)='INIT' - END IF - IF (LDEPOS_AER(KMI)) THEN - - IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')& - .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & - (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL')) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF ORILAM AEROSOLS IS ONLY CODED FOR THE",/,& - & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO and C2R2")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - - IF (ODEPOS_AER(KMI) ) THEN - CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and IN CLOUD & - & AEROSOL SCHEME IN INITIAL FMFILE",/,& - & "THE MOIST AEROSOL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='INIT' - END IF - END IF -END IF -! -! Lagrangian variables -! -IF (LINIT_LG .AND. .NOT.(LLG)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("IT IS INCOHERENT TO HAVE LINIT_LG=.T. AND LLG=.F.",/,& - & "IF YOU WANT LAGRANGIAN TRACERS CHANGE LLG TO .T. ")') -ENDIF -IF (LLG) THEN - IF (OLG .AND. .NOT.(LINIT_LG .AND. CPROGRAM=='MESONH')) THEN - CGETSVT(NSV_LGBEG:NSV_LGEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_LGBEG:NSV_LGEND)='INIT' - ELSE - IF(.NOT.(LINIT_LG) .AND. CPROGRAM=='MESONH') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO LAGRANGIAN VARIABLES IN INITIAL FMFILE",/,& - & "THE LAGRANGIAN VARIABLES HAVE BEEN REINITIALIZED")') - LINIT_LG=.TRUE. - ENDIF - CGETSVT(NSV_LGBEG:NSV_LGEND)='INIT' - END IF -END IF -! -! -! LINOx SV case -! -IF (.NOT.LUSECHEM .AND. LCH_CONV_LINOX) THEN - IF (.NOT.OUSECHEM .AND. OCH_CONV_LINOX) THEN - CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='READ' - ELSE - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LINOX & - &IN INITIAL FMFILE",/,& - & "THE LINOX VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='INIT' - END IF -END IF -! -! Passive pollutant case -! -IF (LPASPOL) THEN - IF (OPASPOL) THEN - CGETSVT(NSV_PPBEG:NSV_PPEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_PPBEG:NSV_PPEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO PASSIVE SCALAR VARIABLES IN INITIAL FMFILE",/,& - & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")') - CGETSVT(NSV_PPBEG:NSV_PPEND)='INIT' - END IF -END IF -! -#ifdef MNH_FOREFIRE -! ForeFire -! -IF (LFOREFIRE) THEN - IF (OFOREFIRE) THEN - CGETSVT(NSV_FFBEG:NSV_FFEND)='READ' - IF(HSTORAGE_TYPE=='TT') THEN - CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT' - END IF - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO FOREFIRE SCALAR VARIABLES IN INITIAL FMFILE",/,& - & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")') - CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT' - END IF -END IF -#endif -! -! Conditional sampling case -! -IF (LCONDSAMP) THEN - IF (OCONDSAMP) THEN - CGETSVT(NSV_CSBEG:NSV_CSEND)='READ' -! IF(CCONF=='START') CGETSVT(NSV_CSBEG:NSV_CSEND)='INIT' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO PASSIVE SCALAR VARIABLES IN INITIAL FMFILE",/,& - & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")') - CGETSVT(NSV_CSBEG:NSV_CSEND)='INIT' - END IF -END IF -! -! Blowing snow scheme -! -IF (LBLOWSNOW) THEN - IF (OBLOWSNOW) THEN - CGETSVT(NSV_SNWBEG:NSV_SNWEND)='READ' - ELSE - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR BLOWING SNOW & - &SCHEME IN INITIAL FMFILE",/,& - & "THE BLOWING SNOW VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') - CGETSVT(NSV_SNWBEG:NSV_SNWEND)='INIT' - END IF -END IF -! -! -! -!* 3.5 Check coherence between the radiation control parameters -! -IF( CRAD == 'ECMW' .AND. CPROGRAM=='MESONH' ) THEN - IF(CLW == 'RRTM' .AND. COPILW == 'SMSH') THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'the SMSH parametrisation of LW optical properties for cloud ice' - WRITE(UNIT=ILUOUT,FMT=*) '(COPILW) can not be used with RRTM radiation scheme' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - ENDIF - IF(CLW == 'MORC' .AND. COPWLW == 'LILI') THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'the LILI parametrisation of LW optical properties for cloud water' - WRITE(UNIT=ILUOUT,FMT=*) '(COPWLW) can not be used with MORC radiation scheme' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - ENDIF - IF( .NOT. LSUBG_COND) THEN - WRITE(UNIT=ILUOUT,FMT=9000) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE SUBGRID CONDENSATION' - WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=5 IN ini_radconf.f90' - ELSE IF (CLW == 'MORC') THEN - WRITE(UNIT=ILUOUT,FMT=9000) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE MORCRETTE LW SCHEME' - WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=5 IN ini_radconf.f90' - ELSE - WRITE(UNIT=ILUOUT,FMT=9000) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=6 IN ini_radconf.f90' - ENDIF -! - IF( LCLEAR_SKY .AND. XDTRAD_CLONLY /= XDTRAD) THEN - ! Check the validity of the LCLEAR_SKY approximation - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE CLEAR-SKY APPROXIMATION' - WRITE(UNIT=ILUOUT,FMT=*) '(i.e. AVERAGE THE WHOLE CLOUDFREE VERTICALS BUT KEEP' - WRITE(UNIT=ILUOUT,FMT=*) 'ALL THE CLOUDY VERTICALS) AND' - WRITE(UNIT=ILUOUT,FMT=*) 'THE CLOUD-ONLY APPROXIMATION (i.e. YOU CALL MORE OFTEN THE' - WRITE(UNIT=ILUOUT,FMT=*) 'RADIATIONS FOR THE CLOUDY VERTICALS THAN FOR CLOUDFREE ONES).' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT POSSIBLE, SO CHOOSE BETWEEN :' - WRITE(UNIT=ILUOUT,FMT=*) 'XDTRAD_CLONLY = XDTRAD and LCLEAR_SKY = FALSE' -! - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF( XDTRAD_CLONLY > XDTRAD ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("BAD USE OF THE CLOUD-ONLY APPROXIMATION " ,& - &" XDTRAD SHOULD BE LARGER THAN XDTRAD_CLONLY ")') -! - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF(( XDTRAD < XTSTEP ).OR. ( XDTRAD_CLONLY < XTSTEP )) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("THE RADIATION CALL XDTRAD OR XDTRAD_CLONLY " ,& - &" IS MORE FREQUENT THAN THE TIME STEP SO ADJUST XDTRAD OR XDTRAD_CLONLY ")') -! - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -END IF -! -IF ( CRAD /= 'NONE' .AND. CPROGRAM=='MESONH' ) THEN - CGETRAD='READ' - IF( HRAD == 'NONE' .AND. CCONF=='RESTA') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'YOU ARE PERFORMING A RESTART. FOR THIS SEGMENT, YOU ARE USING A RADIATION' - WRITE(UNIT=ILUOUT,FMT=*) 'SCHEME AND NO RADIATION SCHEME WAS USED FOR THE PREVIOUS SEGMENT.' - CGETRAD='INIT' - END IF - IF(CCONF=='START') THEN - CGETRAD='INIT' - END IF - IF(CCONF=='RESTA' .AND. (.NOT. LAERO_FT) .AND. (.NOT. LORILAM) & - .AND. (.NOT. LSALT) .AND. (.NOT. LDUST)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT=*) '!!! WARNING !!! FOR REPRODUCTIBILITY BETWEEN START and START+RESTART,' - WRITE(UNIT=ILUOUT,FMT=*) 'YOU MUST USE LAERO_FT=T WITH CAER=TEGE IF CCONF=RESTA IN ALL SEGMENTS' - WRITE(UNIT=ILUOUT,FMT=*) 'TO UPDATE THE OZONE AND AEROSOLS CLIMATOLOGY USED BY THE RADIATION CODE;' - END IF -END IF -! -! 3.6 check the initialization of the deep convection scheme -! -IF ( (CDCONV /= 'KAFR') .AND. & - (CSCONV /= 'KAFR') .AND. LCHTRANS ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",& - &"CONVECTIVE TRANSPORT OF TRACERS BUT IT CAN ONLY",& - &"BE USED FOR THE KAIN FRITSCH SCHEME ")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -SELECT CASE ( CDCONV ) - CASE( 'KAFR' ) - IF (.NOT. ( LUSERV ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH DEEP CONV. ",& - &" SCHEME. YOU MUST HAVE VAPOR ",/,"LUSERV IS SET TO TRUE ")') - LUSERV=.TRUE. - ELSE IF (.NOT. ( LUSERI ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",& - &" DEEP CONV. SCHEME. BUT THE DETRAINED CLOUD ICE WILL BE ADDED TO ",& - &" THE CLOUD WATER ")') - ELSE IF (.NOT. ( LUSERI.AND.LUSERC ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",& - &" DEEP CONV. SCHEME. BUT THE DETRAINED CLOUD WATER AND CLOUD ICE ",& - &" WILL BE ADDED TO THE WATER VAPOR FIELD ")') - END IF - IF ( LCHTRANS .AND. NSV == 0 ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",& - &"CONVECTIVE TRANSPORT OF TRACERS BUT YOUR TRACER ",& - &"NUMBER NSV IS ZERO ",/,"LCHTRANS IS SET TO FALSE")') - LCHTRANS=.FALSE. - END IF -END SELECT -! -IF ( CDCONV == 'KAFR' .AND. LCHTRANS .AND. NSV > 0 ) THEN - IF( OCHTRANS ) THEN - CGETSVCONV='READ' - ELSE - CGETSVCONV='INIT' - END IF -END IF -! -SELECT CASE ( CSCONV ) - CASE( 'KAFR' ) - IF (.NOT. ( LUSERV ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH SHALLOW CONV. ",& - &" SCHEME. YOU MUST HAVE VAPOR ",/,"LUSERV IS SET TO TRUE ")') - LUSERV=.TRUE. - ELSE IF (.NOT. ( LUSERI ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",& - &" SHALLOW CONV. SCHEME. BUT THE DETRAINED CLOUD ICE WILL BE ADDED TO ",& - &" THE CLOUD WATER ")') - ELSE IF (.NOT. ( LUSERI.AND.LUSERC ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",& - &" SHALLOW CONV. SCHEME. BUT THE DETRAINED CLOUD WATER AND CLOUD ICE ",& - &" WILL BE ADDED TO THE WATER VAPOR FIELD ")') - END IF - IF ( LCHTRANS .AND. NSV == 0 ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",& - &"CONVECTIVE TRANSPORT OF TRACERS BUT YOUR TRACER ",& - &"NUMBER NSV IS ZERO ",/,"LCHTRANS IS SET TO FALSE")') - LCHTRANS=.FALSE. - END IF - CASE( 'EDKF' ) - IF (CTURB == 'NONE' ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE EDKF ", & - &"SHALLOW CONVECTION WITHOUT TURBULENCE SCHEME : ", & - &"IT IS NOT POSSIBLE")') -! - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -END SELECT -! -! -CGETCONV = 'SKIP' -! -IF ( (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' ) .AND. CPROGRAM=='MESONH') THEN - CGETCONV = 'READ' - IF( HDCONV == 'NONE' .AND. CCONF=='RESTA') THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(UNIT=ILUOUT,FMT='(" YOU ARE PERFORMING A RESTART. FOR THIS ",& - &" SEGMENT, YOU ARE USING A DEEP CONVECTION SCHEME AND NO DEEP ",& - &" CONVECTION SCHEME WAS USED FOR THE PREVIOUS SEGMENT. ")') -! - CGETCONV = 'INIT' - END IF - IF(CCONF=='START') THEN - CGETCONV = 'INIT' - END IF -END IF -! -!* 3.7 configuration and model version -! -IF (KMI == 1) THEN -! - IF (L1D.AND.(CLBCX(1)/='CYCL'.AND.CLBCX(2)/='CYCL' & - .AND.CLBCY(1)/='CYCL'.AND.CLBCY(2)/='CYCL')) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 1D MODEL VERSION WITH NON-CYCL",& - & "CLBCX OR CLBCY VALUES")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - IF (L2D.AND.(CLBCY(1)/='CYCL'.AND.CLBCY(2)/='CYCL')) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2D MODEL VERSION WITH NON-CYCL",& - & " CLBCY VALUES")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - ! - IF ( (.NOT. LCARTESIAN) .AND. ( LCORIO) .AND. (.NOT. LGEOST_UV_FRC) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("BE CAREFUL YOU COULD HAVE SPURIOUS MOTIONS " ,& - & " NEAR THE LBC AS LCORIO=T and LGEOST_UV_FRC=F")') - END IF - ! - IF ((.NOT.LFLAT).AND.OFLAT) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT=*) 'ZERO OROGRAPHY IN INITIAL FILE' - WRITE(UNIT=ILUOUT,FMT=*) '***** ALL TERMS HAVE BEEN NEVERTHELESS COMPUTED WITHOUT SIMPLIFICATION*****' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS SHOULD LEAD TO ERRORS IN THE PRESSURE COMPUTATION' - END IF - IF (LFLAT.AND.(.NOT.OFLAT)) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='(" OROGRAPHY IS NOT EQUAL TO ZERO ", & - & "IN INITIAL FILE" ,/, & - & "******* OROGRAPHY HAS BEEN SET TO ZERO *********",/, & - & "ACCORDING TO ZERO OROGRAPHY, SIMPLIFICATIONS HAVE ", & - & "BEEN MADE IN COMPUTATIONS")') - END IF -END IF -! -!* 3.8 System of equations -! -IF ( HEQNSYS /= CEQNSYS ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU HAVE CHANGED THE SYSTEM OF EQUATIONS' - WRITE(ILUOUT,FMT=*) 'THE ANELASTIC CONSTRAINT IS PERHAPS CHANGED :' - WRITE(ILUOUT,FMT=*) 'FOR THE INITIAL FILE YOU HAVE USED ',HEQNSYS - WRITE(ILUOUT,FMT=*) 'FOR THE RUN YOU PLAN TO USE ',CEQNSYS - WRITE(ILUOUT,FMT=*) 'THIS CAN LEAD TO A NUMERICAL EXPLOSION IN THE FIRST TIME STEPS' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -! 3.9 Numerical schemes -! -IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. & - (CTEMP_SCHEME /= 'LEFR') .AND. (CTEMP_SCHEME /= 'RKC4') ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("CEN4TH SCHEME HAS TO BE USED WITH ",& - &"CTEMP_SCHEME = LEFR of RKC4 ONLY")') - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -IF ( (CUVW_ADV_SCHEME == 'WENO_K') .AND. LNUMDIFU ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE NUMERICAL DIFFUSION ",& - &"WITH WENO SCHEME ALREADY DIFFUSIVE")') -END IF -!------------------------------------------------------------------------------- -! -!* 4. CHECK COHERENCE BETWEEN EXSEG VARIABLES -! --------------------------------------- -! -!* 4.1 coherence between coupling variables in EXSEG file -! -IF (KMI == 1) THEN - NCPL_NBR = 0 - DO JCI = 1,JPCPLFILEMAX - IF (LEN_TRIM(CCPLFILE(JCI)) /= 0) THEN ! Finds the number - NCPL_NBR = NCPL_NBR + 1 ! of coupling files - ENDIF - IF (JCI/=JPCPLFILEMAX) THEN ! Deplaces the coupling files - IF ((LEN_TRIM(CCPLFILE(JCI)) == 0) .AND. &! names if one missing - (LEN_TRIM(CCPLFILE(JCI+1)) /= 0)) THEN - DO JI=JCI,JPCPLFILEMAX-1 - CCPLFILE(JI)=CCPLFILE(JI+1) - END DO - CCPLFILE(JPCPLFILEMAX)=' ' - END IF - END IF - END DO -! - IF (NCPL_NBR /= 0) THEN - LSTEADYLS = .FALSE. - ELSE - LSTEADYLS = .TRUE. - ENDIF -END IF -! -!* 4.3 check consistency in forcing switches -! -IF ( LFORCING ) THEN - IF ( LRELAX_THRV_FRC .AND. ( LTEND_THRV_FRC .OR. LGEOST_TH_FRC ) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU CHOSE A TEMPERATURE AND HUMIDITY RELAXATION' - WRITE(ILUOUT,FMT=*) 'TOGETHER WITH TENDENCY OR GEOSTROPHIC FORCING' - WRITE(ILUOUT,FMT=*) & - 'YOU MIGHT CHECK YOUR SWITCHES: LRELAX_THRV_FRC, LTEND_THRV_FRC, AND' - WRITE(ILUOUT,FMT=*) 'LGEOST_TH_FRC' - END IF -! - IF ( LRELAX_UV_FRC .AND. LRELAX_UVMEAN_FRC) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU MUST CHOOSE BETWEEN A RELAXATION APPLIED TO' - WRITE(ILUOUT,FMT=*) 'THE 3D FULL WIND FIELD (LRELAX_UV_FRC) OR' - WRITE(ILUOUT,FMT=*) 'THE HORIZONTAL MEAN WIND (LRELAX_UVMEAN_FRC)' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF ( (LRELAX_UV_FRC .OR. LRELAX_UVMEAN_FRC) .AND. LGEOST_UV_FRC ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU MUST NOT USE A WIND RELAXATION' - WRITE(ILUOUT,FMT=*) 'TOGETHER WITH A GEOSTROPHIC FORCING' - WRITE(ILUOUT,FMT=*) 'CHECK SWITCHES: LRELAX_UV_FRC, LRELAX_UVMEAN_FRC, LGEOST_UV_FRC' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF ( CRELAX_HEIGHT_TYPE.NE."FIXE" .AND. CRELAX_HEIGHT_TYPE.NE."THGR" ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'CRELAX_HEIGHT_TYPE MUST BE EITHER "FIXE" OR "THGR"' - WRITE(ILUOUT,FMT=*) 'BUT IT IS "', CRELAX_HEIGHT_TYPE, '"' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF ( .NOT.LCORIO .AND. LGEOST_UV_FRC ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU CANNOT HAVE A GEOSTROPHIC FORCING WITHOUT' - WRITE(ILUOUT,FMT=*) 'ACTIVATING LCORIOLIS OPTION' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! - IF ( LPGROUND_FRC ) THEN - WRITE(ILUOUT,FMT=*) 'SURFACE PRESSURE FORCING NOT YET IMPLEMENTED' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! -END IF -! -IF (LTRANS .AND. .NOT. LFLAT ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU ASK FOR A CONSTANT SPEED DOMAIN TRANSLATION ' - WRITE(ILUOUT,FMT=*) 'BUT NOT IN THE FLAT TERRAIN CASE:' - WRITE(ILUOUT,FMT=*) 'THIS IS NOT ALLOWED ACTUALLY' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -!* 4.4 Check the coherence between the LUSERn and LHORELAX -! -IF (.NOT. LUSERV .AND. LHORELAX_RV) THEN - LHORELAX_RV=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RV FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RV=FALSE' -END IF -! -IF (.NOT. LUSERC .AND. LHORELAX_RC) THEN - LHORELAX_RC=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RC FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RC=FALSE' -END IF -! -IF (.NOT. LUSERR .AND. LHORELAX_RR) THEN - LHORELAX_RR=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RR FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RR=FALSE' -END IF -! -IF (.NOT. LUSERI .AND. LHORELAX_RI) THEN - LHORELAX_RI=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RI FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RI=FALSE' -END IF -! -IF (.NOT. LUSERS .AND. LHORELAX_RS) THEN - LHORELAX_RS=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RS FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RS=FALSE' -END IF -! -IF (.NOT. LUSERG .AND. LHORELAX_RG) THEN - LHORELAX_RG=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RG FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RG=FALSE' -END IF -! -IF (.NOT. LUSERH .AND. LHORELAX_RH) THEN - LHORELAX_RH=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RH FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RH=FALSE' -END IF -! -IF (CTURB=='NONE' .AND. LHORELAX_TKE) THEN - LHORELAX_TKE=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX TKE FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_TKE=FALSE' -END IF -! -! -IF (CCLOUD/='C2R2' .AND. CCLOUD/='KHKO' .AND. LHORELAX_SVC2R2) THEN - LHORELAX_SVC2R2=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX C2R2 or KHKO FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC2R2=FALSE' -END IF -! -IF (CCLOUD/='C3R5' .AND. LHORELAX_SVC1R3) THEN - LHORELAX_SVC1R3=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX C3R5 FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC1R3=FALSE' -END IF -! -IF (CCLOUD/='LIMA' .AND. LHORELAX_SVLIMA) THEN - LHORELAX_SVLIMA=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX LIMA FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVLIMA=FALSE' -END IF -! -IF (CELEC(1:3) /= 'ELE' .AND. LHORELAX_SVELEC) THEN - LHORELAX_SVELEC=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX ELEC FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVELEC=FALSE' -END IF -! -IF (.NOT. LUSECHEM .AND. LHORELAX_SVCHEM) THEN - LHORELAX_SVCHEM=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX CHEM FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCHEM=FALSE' -END IF -! -IF (.NOT. LUSECHIC .AND. LHORELAX_SVCHIC) THEN - LHORELAX_SVCHIC=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX ICE CHEM FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCHIC=FALSE' -END IF -! -IF (.NOT. LORILAM .AND. LHORELAX_SVAER) THEN - LHORELAX_SVAER=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX AEROSOL FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVAER=FALSE' -END IF - -IF (.NOT. LDUST .AND. LHORELAX_SVDST) THEN - LHORELAX_SVDST=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX DUST FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVDST=FALSE' -END IF - -IF (.NOT. LSALT .AND. LHORELAX_SVSLT) THEN - LHORELAX_SVSLT=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX SEA SALT FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVSLT=FALSE' -END IF - -IF (.NOT. LPASPOL .AND. LHORELAX_SVPP) THEN - LHORELAX_SVPP=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX PASSIVE POLLUTANT FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVPP=FALSE' -END IF -#ifdef MNH_FOREFIRE -IF (.NOT. LFOREFIRE .AND. LHORELAX_SVFF) THEN - LHORELAX_SVFF=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX FOREFIRE FLUXES BUT THEY DO NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVFF=FALSE' -END IF -#endif -IF (.NOT. LCONDSAMP .AND. LHORELAX_SVCS) THEN - LHORELAX_SVCS=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX CONDITIONAL SAMPLING FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCS=FALSE' -END IF - -IF (.NOT. LBLOWSNOW .AND. LHORELAX_SVSNW) THEN - LHORELAX_SVSNW=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX BLOWING SNOW FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVSNW=FALSE' -END IF - -IF (ANY(LHORELAX_SV(NSV+1:))) THEN - LHORELAX_SV(NSV+1:)=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX SV(NSV+1:) FIELD BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SV(NSV+1:)=FALSE' -END IF -! -!* 4.5 check the number of points for the horizontal relaxation -! -IF ( NRIMX > KRIMX .AND. .NOT.LHORELAX_SVELEC ) THEN - NRIMX = KRIMX - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A LARGER NUMBER OF POINTS ' - WRITE(ILUOUT,FMT=*) 'FOR THE HORIZONTAL RELAXATION THAN THE ' - WRITE(ILUOUT,FMT=*) 'CORRESPONDING NUMBER OF LARGE SCALE FIELDS:' - WRITE(ILUOUT,FMT=*) 'IT IS THEREFORE REDUCED TO NRIMX =',NRIMX -END IF -! -IF ( L2D .AND. KRIMY>0 ) THEN - NRIMY = 0 - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A 2D MODEL THEREFORE NRIMY=0 ' -END IF -! -IF ( NRIMY > KRIMY .AND. .NOT.LHORELAX_SVELEC ) THEN - NRIMY = KRIMY - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A LARGER NUMBER OF POINTS ' - WRITE(ILUOUT,FMT=*) 'FOR THE HORIZONTAL RELAXATION THAN THE ' - WRITE(ILUOUT,FMT=*) 'CORRESPONDING NUMBER OF LARGE SCALE FIELDS:' - WRITE(ILUOUT,FMT=*) 'IT IS THEREFORE REDUCED TO NRIMY =',NRIMY -END IF -! -IF ( (.NOT. LHORELAX_UVWTH) .AND. (.NOT.(ANY(LHORELAX_SV))) .AND. & - (.NOT. LHORELAX_SVC2R2).AND. (.NOT. LHORELAX_SVC1R3) .AND. & - (.NOT. LHORELAX_SVLIMA).AND. & - (.NOT. LHORELAX_SVELEC).AND. (.NOT. LHORELAX_SVCHEM) .AND. & - (.NOT. LHORELAX_SVLG) .AND. (.NOT. LHORELAX_SVPP) .AND. & - (.NOT. LHORELAX_SVCS) .AND. & -#ifdef MNH_FOREFIRE - (.NOT. LHORELAX_SVFF) .AND. & -#endif - (.NOT. LHORELAX_RV) .AND. (.NOT. LHORELAX_RC) .AND. & - (.NOT. LHORELAX_RR) .AND. (.NOT. LHORELAX_RI) .AND. & - (.NOT. LHORELAX_RS) .AND. (.NOT. LHORELAX_RG) .AND. & - (.NOT. LHORELAX_RH) .AND. (.NOT. LHORELAX_TKE) .AND. & - (.NOT. LHORELAX_SVCHIC).AND. & - (NRIMX /= 0 .OR. NRIMY /= 0)) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE THE HORIZONTAL RELAXATION ' - WRITE(ILUOUT,FMT=*) 'THEREFORE NRIMX=NRIMY=0 ' - NRIMX=0 - NRIMY=0 -END IF -! -IF ((LHORELAX_UVWTH .OR. LHORELAX_SVPP .OR. & - LHORELAX_SVCS .OR. & -#ifdef MNH_FOREFIRE - LHORELAX_SVFF .OR. & -#endif - LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR. & - LHORELAX_SVLIMA .OR. & - LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR. & - LHORELAX_SVLG .OR. ANY(LHORELAX_SV) .OR. & - LHORELAX_RV .OR. LHORELAX_RC .OR. & - LHORELAX_RR .OR. LHORELAX_RI .OR. & - LHORELAX_RG .OR. LHORELAX_RS .OR. & - LHORELAX_RH .OR. LHORELAX_TKE.OR. & - LHORELAX_SVCHIC ) & - .AND. (NRIMX==0 .OR. (NRIMY==0 .AND. .NOT.(L2D) ))) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION ' - WRITE(ILUOUT,FMT=*) 'BUT NRIMX OR NRIMY=0 CHANGE YOUR VALUES ' - WRITE(ILUOUT,FMT=*) "LHORELAX_UVWTH=",LHORELAX_UVWTH - WRITE(ILUOUT,FMT=*) "LHORELAX_SVC2R2=",LHORELAX_SVC2R2 - WRITE(ILUOUT,FMT=*) "LHORELAX_SVC1R3=",LHORELAX_SVC1R3 - WRITE(ILUOUT,FMT=*) "LHORELAX_SVLIMA=",LHORELAX_SVLIMA - WRITE(ILUOUT,FMT=*) "LHORELAX_SVELEC=",LHORELAX_SVELEC - WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHEM=",LHORELAX_SVCHEM - WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHIC=",LHORELAX_SVCHIC - WRITE(ILUOUT,FMT=*) "LHORELAX_SVLG=",LHORELAX_SVLG - WRITE(ILUOUT,FMT=*) "LHORELAX_SVPP=",LHORELAX_SVPP -#ifdef MNH_FOREFIRE - WRITE(ILUOUT,FMT=*) "LHORELAX_SVFF=",LHORELAX_SVFF -#endif - WRITE(ILUOUT,FMT=*) "LHORELAX_SVCS=",LHORELAX_SVCS - WRITE(ILUOUT,FMT=*) "LHORELAX_SV=",LHORELAX_SV - WRITE(ILUOUT,FMT=*) "LHORELAX_RV=",LHORELAX_RV - WRITE(ILUOUT,FMT=*) "LHORELAX_RC=",LHORELAX_RC - WRITE(ILUOUT,FMT=*) "LHORELAX_RR=",LHORELAX_RR - WRITE(ILUOUT,FMT=*) "LHORELAX_RI=",LHORELAX_RI - WRITE(ILUOUT,FMT=*) "LHORELAX_RG=",LHORELAX_RG - WRITE(ILUOUT,FMT=*) "LHORELAX_RS=",LHORELAX_RS - WRITE(ILUOUT,FMT=*) "LHORELAX_RH=",LHORELAX_RH - WRITE(ILUOUT,FMT=*) "LHORELAX_TKE=", LHORELAX_TKE - WRITE(ILUOUT,FMT=*) "NRIMX=",NRIMX - WRITE(ILUOUT,FMT=*) "NRIMY=",NRIMY - WRITE(ILUOUT,FMT=*) "L2D=",L2D - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -IF ((LHORELAX_UVWTH .OR. LHORELAX_SVPP .OR. & - LHORELAX_SVCS .OR. & -#ifdef MNH_FOREFIRE - LHORELAX_SVFF .OR. & -#endif - LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR. & - LHORELAX_SVLIMA .OR. & - LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR. & - LHORELAX_SVLG .OR. ANY(LHORELAX_SV) .OR. & - LHORELAX_RV .OR. LHORELAX_RC .OR. & - LHORELAX_RR .OR. LHORELAX_RI .OR. & - LHORELAX_RG .OR. LHORELAX_RS .OR. & - LHORELAX_RH .OR. LHORELAX_TKE.OR. & - LHORELAX_SVCHIC ) & - .AND. (KMI /=1)) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION ' - WRITE(ILUOUT,FMT=*) 'FOR A NESTED MODEL BUT THE COUPLING IS ALREADY DONE' - WRITE(ILUOUT,FMT=*) 'BY THE GRID NESTING. CHANGE LHORELAX TO FALSE' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -IF ((LHORELAX_UVWTH .OR. LHORELAX_SVPP .OR. & - LHORELAX_SVCS .OR. & -#ifdef MNH_FOREFIRE - LHORELAX_SVFF .OR. & -#endif - LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR. & - LHORELAX_SVLIMA .OR. & - LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR. & - LHORELAX_SVLG .OR. ANY(LHORELAX_SV) .OR. & - LHORELAX_RV .OR. LHORELAX_RC .OR. & - LHORELAX_RR .OR. LHORELAX_RI .OR. & - LHORELAX_RG .OR. LHORELAX_RS .OR. & - LHORELAX_RH .OR. LHORELAX_TKE.OR. & - LHORELAX_SVCHIC ) & - .AND. (CLBCX(1)=='CYCL'.OR.CLBCX(2)=='CYCL' & - .OR.CLBCY(1)=='CYCL'.OR.CLBCY(2)=='CYCL')) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION ' - WRITE(ILUOUT,FMT=*) 'FOR CYCLIC CLBCX OR CLBCY VALUES' - WRITE(ILUOUT,FMT=*) 'CHANGE LHORELAX TO FALSE' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERV) .AND. LUSERV .AND. LHORELAX_RV -ELSE - GRELAX = .NOT.(LUSERV_G(NDAD(KMI))) .AND. LUSERV_G(KMI).AND. LHORELAX_RV -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RV=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RV FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RV=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERC) .AND. LUSERC .AND. LHORELAX_RC -ELSE - GRELAX = .NOT.(LUSERC_G(NDAD(KMI))) .AND. LUSERC_G(KMI).AND. LHORELAX_RC -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RC=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RC FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RC=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERR) .AND. LUSERR .AND. LHORELAX_RR -ELSE - GRELAX = .NOT.(LUSERR_G(NDAD(KMI))) .AND. LUSERR_G(KMI).AND. LHORELAX_RR -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RR=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RR FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RR=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERI) .AND. LUSERI .AND. LHORELAX_RI -ELSE - GRELAX = .NOT.(LUSERI_G(NDAD(KMI))) .AND. LUSERI_G(KMI).AND. LHORELAX_RI -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RI=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RI FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RI=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERG) .AND. LUSERG .AND. LHORELAX_RG -ELSE - GRELAX = .NOT.(LUSERG_G(NDAD(KMI))) .AND. LUSERG_G(KMI).AND. LHORELAX_RG -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RG=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RG FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RG=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERH) .AND. LUSERH .AND. LHORELAX_RH -ELSE - GRELAX = .NOT.(LUSERH_G(NDAD(KMI))) .AND. LUSERH_G(KMI).AND. LHORELAX_RH -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RH=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RH FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RH=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = .NOT.(OUSERS) .AND. LUSERS .AND. LHORELAX_RS -ELSE - GRELAX = .NOT.(LUSERS_G(NDAD(KMI))) .AND. LUSERS_G(KMI).AND. LHORELAX_RS -END IF -! -IF ( GRELAX ) THEN - LHORELAX_RS=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RS FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RS=FALSE' -END IF -! -IF (KMI==1) THEN - GRELAX = HTURB=='NONE' .AND. LUSETKE(1).AND. LHORELAX_TKE -ELSE - GRELAX = .NOT.(LUSETKE(NDAD(KMI))) .AND. LUSETKE(KMI) .AND. LHORELAX_TKE -END IF -! -IF ( GRELAX ) THEN - LHORELAX_TKE=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE TKE FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_TKE=FALSE' -END IF -! -! -DO JSV = 1,NSV_USER -! - IF (KMI==1) THEN - GRELAX = KSV_USER<JSV .AND. LUSESV(JSV,1).AND. LHORELAX_SV(JSV) - ELSE - GRELAX = .NOT.(LUSESV(JSV,NDAD(KMI))) .AND. LUSESV(JSV,KMI) .AND. LHORELAX_SV(JSV) - END IF - ! - IF ( GRELAX ) THEN - LHORELAX_SV(JSV)=.FALSE. - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE ',JSV,' SV FIELD' - WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI) - WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.' - WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SV(',JSV,')=FALSE' - END IF -END DO -! -!* 4.6 consistency in LES diagnostics choices -! -IF (CLES_NORM_TYPE=='EKMA' .AND. .NOT. LCORIO) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE EKMAN NORMALIZATION' - WRITE(ILUOUT,FMT=*) 'BUT CORIOLIS FORCE IS NOT USED (LCORIO=.FALSE.)' - WRITE(ILUOUT,FMT=*) 'THEN, NO NORMALIZATION IS PERFORMED' - CLES_NORM_TYPE='NONE' -END IF -! -!* 4.7 Check the coherence with LNUMDIFF -! -IF (L1D .AND. (LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE HORIZONTAL DIFFUSION ' - WRITE(ILUOUT,FMT=*) 'BUT YOU ARE IN A COLUMN MODEL (L1D=.TRUE.).' - WRITE(ILUOUT,FMT=*) 'THEREFORE LNUMDIFU and LNUMDIFTH and LNUMDIFSV' - WRITE(ILUOUT,FMT=*) 'ARE SET TO FALSE' - LNUMDIFU=.FALSE. - LNUMDIFTH=.FALSE. - LNUMDIFSV=.FALSE. -END IF -! -IF (.NOT. LNUMDIFTH .AND. LZDIFFU) THEN - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE HORIZONTAL DIFFUSION (LNUMDIFTH=F)' - WRITE(ILUOUT,FMT=*) 'BUT YOU WANT TO USE Z-NUMERICAL DIFFUSION ' - WRITE(ILUOUT,FMT=*) 'THEREFORE LNUMDIFTH IS SET TO TRUE' - LNUMDIFTH=.TRUE. -END IF -! -!* 4.8 Other -! -IF (XTNUDGING < 4.*XTSTEP) THEN - XTNUDGING = 4.*XTSTEP - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("TIME SCALE FOR NUDGING CAN NOT BE SMALLER THAN", & - & " FOUR TIMES THE TIME STEP")') - WRITE(ILUOUT,FMT=*) 'XTNUDGING is SET TO ',XTNUDGING -END IF -! -! -IF (XWAY(KMI) == 3. ) THEN - XWAY(KMI) = 2. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("XWAY=3 DOES NOT EXIST ANYMORE; ", & - & " IT IS REPLACED BY XWAY=2 ")') -END IF -! -IF ( (KMI == 1) .AND. XWAY(KMI) /= 0. ) THEN - XWAY(KMI) = 0. - WRITE(UNIT=ILUOUT,FMT=9002) KMI - WRITE(UNIT=ILUOUT,FMT='("XWAY MUST BE EQUAL TO 0 FOR DAD MODEL")') -END IF -! -!JUANZ ZRESI solver need BSPLITTING -IF ( CPRESOPT == 'ZRESI' .AND. CSPLIT /= 'BSPLITTING' ) THEN - WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("Paralleliez in Z solver CPRESOPT=ZRESI need also CSPLIT=BSPLITTING ")') - WRITE(ILUOUT,FMT=*) ' ERROR you have to set also CSPLIT=BSPLITTING ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') -END IF -! -IF ( LEN_TRIM(HINIFILEPGD)>0 ) THEN - IF ( CINIFILEPGD/=HINIFILEPGD ) THEN - WRITE(UNIT=ILUOUT,FMT=9001) KMI - WRITE(ILUOUT,FMT=*) ' ERROR : in EXSEG1.nam, in NAM_LUNITn you have CINIFILEPGD= ',CINIFILEPGD - WRITE(ILUOUT,FMT=*) ' whereas in .des you have CINIFILEPGD= ',HINIFILEPGD - WRITE(ILUOUT,FMT=*) ' Please check your Namelist ' - WRITE(ILUOUT,FMT=*) ' For example, you may have specified the un-nested PGD file instead of the nested PGD file ' - WRITE(ILUOUT,FMT=*) - WRITE(ILUOUT,FMT=*) '###############' - WRITE(ILUOUT,FMT=*) ' MESONH ABORTS' - WRITE(ILUOUT,FMT=*) '###############' - WRITE(ILUOUT,FMT=*) - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -ELSE - CINIFILEPGD = '' -!* note that after a spawning, there is no value for CINIFILEPGD in the .des file, -! so the checking cannot be made if the user starts a simulation directly from -! a spawned file (without the prep_real_case stage) -END IF -!------------------------------------------------------------------------------- -! -!* 5. WE DO NOT FORGET TO UPDATE ALL DOLLARN NAMELIST VARIABLES -! --------------------------------------------------------- -! -CALL UPDATE_NAM_LUNITN -CALL UPDATE_NAM_CONFN -CALL UPDATE_NAM_DRAGTREEN -CALL UPDATE_NAM_DRAGBLDGN -CALL UPDATE_NAM_DYNN -CALL UPDATE_NAM_ADVN -CALL UPDATE_NAM_PARAMN -CALL UPDATE_NAM_PARAM_RADN -#ifdef MNH_ECRAD -CALL UPDATE_NAM_PARAM_ECRADN -#endif -CALL UPDATE_NAM_PARAM_KAFRN -CALL UPDATE_NAM_PARAM_MFSHALLN -CALL UPDATE_NAM_LBCN -CALL UPDATE_NAM_NUDGINGN -CALL UPDATE_NAM_TURBN -CALL UPDATE_NAM_BLANKN -CALL UPDATE_NAM_CH_MNHCN -CALL UPDATE_NAM_CH_SOLVERN -CALL UPDATE_NAM_SERIESN -CALL UPDATE_NAM_BLOWSNOWN -CALL UPDATE_NAM_STATIONn -!------------------------------------------------------------------------------- -WRITE(UNIT=ILUOUT,FMT='(/)') -!------------------------------------------------------------------------------- -! -!* 6. FORMATS -! ------- -! -9000 FORMAT(/,'NOTE IN READ_EXSEG FOR MODEL ', I2, ' : ',/, & - '--------------------------------') -9001 FORMAT(/,'CAUTION ERROR IN READ_EXSEG FOR MODEL ', I2,' : ',/, & - '----------------------------------------' ) -9002 FORMAT(/,'WARNING IN READ_EXSEG FOR MODEL ', I2,' : ',/, & - '----------------------------------' ) -9003 FORMAT(/,'FATAL ERROR IN READ_EXSEG FOR MODEL ', I2,' : ',/, & - '--------------------------------------' ) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE READ_EXSEG_n -- GitLab