From 6cf72ead81757e33ff1f885be15c1bf638fecb69 Mon Sep 17 00:00:00 2001 From: Juan Escobar <escj@aero.obs-mip.fr> Date: Tue, 21 Jul 2020 10:47:58 +0200 Subject: [PATCH] Juan 21/07/2020:phasage MNH_55_OPENACC de ZSOLVER --- anel_balancen.f90 | 33 ++-- ini_dynamics.f90 | 13 +- ini_modeln.f90 | 437 ++++++++++++++++++++++-------------------- ini_spectren.f90 | 120 +++++------- modeln.f90 | 479 +++++++++++++++++++++++----------------------- pressurez.f90 | 36 ++-- read_exsegn.f90 | 13 +- spectre.f90 | 32 ++-- tridz.f90 | 19 +- 9 files changed, 591 insertions(+), 591 deletions(-) diff --git a/anel_balancen.f90 b/anel_balancen.f90 index 9ced69e3c..c1659356c 100644 --- a/anel_balancen.f90 +++ b/anel_balancen.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2020 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ########################## @@ -56,9 +56,6 @@ END MODULE MODI_ANEL_BALANCE_n !! Module MODD_CONF : contains configuration variables for all models. !! NVERB : verbosity level for output-listing !! -!! Module MODD_LUNIT : contains logical unit names for all models -!! CLUOUT0 : name of output-listing -!! !! Module MODD_GRID_n : contains grid variables !! XMAP,XXHAT,XYHAT,XZZ !! @@ -104,6 +101,7 @@ END MODULE MODI_ANEL_BALANCE_n !! 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 @@ -111,11 +109,9 @@ END MODULE MODI_ANEL_BALANCE_n ! ! USE MODE_ll -USE MODE_IO_ll USE MODE_MODELN_HANDLER ! USE MODD_CONF ! declarative modules -USE MODD_LUNIT USE MODD_PARAMETERS USE MODD_GRID_n USE MODD_DIM_n @@ -231,7 +227,8 @@ 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,& ZBFB,ZBF_SXP2_YP1_Z, & ZAF_ZS,ZBF_ZS,ZCF_ZS, & @@ -248,7 +245,7 @@ CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-after TRIDZ::XRHODJ",PRECISION) !* 3.1 multiplication by RHODJ ! !$20140710 UPHALO on XRHODJ -!CALL ADD3DFIELD_ll(TZFIELDS_ll,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) @@ -257,15 +254,15 @@ CALL MPPDB_CHECK3D(XWT,"anel_balancen3.1-after update halo::XWT",PRECISION) ! ZRU(:,:,:) = MXM(XRHODJ) * XUT(:,:,:) ZRV(:,:,:) = MYM(XRHODJ) * XVT(:,:,:) -ZRW(:,:,:) = MZM(1,IKU,1,XRHODJ) * XWT(:,:,:) +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) -CALL ADD3DFIELD_ll(TZFIELDS_ll, ZRV) -CALL ADD3DFIELD_ll(TZFIELDS_ll, ZRW) -CALL ADD3DFIELD_ll(TZFIELDS_ll, ZTH) +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) @@ -316,11 +313,11 @@ DEALLOCATE(ZBFY,ZTRIGSX,ZTRIGSY,ZRR,ZBF_SXP2_YP1_Z) !20131112 appli update_halo_ll and associated operations XUT(:,:,:) = ZRU(:,:,:) / MXM(XRHODJ) XVT(:,:,:) = ZRV(:,:,:) / MYM(XRHODJ) -XWT(:,:,:) = ZRW(:,:,:) / MZM(1,IKU,1,XRHODJ) +XWT(:,:,:) = ZRW(:,:,:) / MZM(XRHODJ) !20131112 appli update_halo_ll to XUT,XVT,XWT -CALL ADD3DFIELD_ll(TZFIELDS_ll, XUT) -CALL ADD3DFIELD_ll(TZFIELDS_ll, XVT) -CALL ADD3DFIELD_ll(TZFIELDS_ll, 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) diff --git a/ini_dynamics.f90 b/ini_dynamics.f90 index 4b1b687f9..c46d5ca10 100644 --- a/ini_dynamics.f90 +++ b/ini_dynamics.f90 @@ -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, & @@ -115,7 +115,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 ! @@ -187,7 +188,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, & @@ -393,7 +394,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 ! @@ -507,7 +509,8 @@ 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, & PBF_SXP2_YP1_Z, & diff --git a/ini_modeln.f90 b/ini_modeln.f90 index 0f2cf8092..19254a43c 100644 --- a/ini_modeln.f90 +++ b/ini_modeln.f90 @@ -9,12 +9,11 @@ ! INTERFACE ! - SUBROUTINE INI_MODEL_n(KMI,HLUOUT,TPINIFILE) + SUBROUTINE INI_MODEL_n(KMI,TPINIFILE) ! -USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_IO, ONLY: TFILEDATA ! INTEGER, INTENT(IN) :: KMI ! Model Index -CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing of nested models TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file ! END SUBROUTINE INI_MODEL_n @@ -23,7 +22,7 @@ END INTERFACE ! END MODULE MODI_INI_MODEL_n ! ############################################ - SUBROUTINE INI_MODEL_n(KMI,HLUOUT,TPINIFILE) + SUBROUTINE INI_MODEL_n(KMI,TPINIFILE) ! ############################################ ! !!**** *INI_MODEL_n* - routine to initialize the nested model _n @@ -64,7 +63,7 @@ END MODULE MODI_INI_MODEL_n !! 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_ll. +!! - 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 @@ -75,8 +74,6 @@ END MODULE MODI_INI_MODEL_n !! !! EXTERNAL !! -------- -!! FMREAD : to read a LFIFM file -!! FMFREE : to release a logical unit number !! SET_DIM : to initialize dimensions !! SET_GRID : to initialize grid !! METRICS : to compute metric coefficients @@ -279,180 +276,187 @@ END MODULE MODI_INI_MODEL_n !! 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 !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -#ifdef CPLOASIS - USE MODI_SFX_OASIS_READ_NAM +#ifdef MNH_ECRAD +USE YOERDI, only: RCCO2 #endif -! -USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODE_IO_ll -USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST -USE MODE_FM, ONLY: IO_FILE_OPEN_ll -USE MODE_FMREAD -USE MODE_GATHER_ll -USE MODE_MSG -USE MODE_TYPE_ZDIFFU -! -USE MODD_NSV -USE MODD_PARAMETERS -USE MODD_CST + +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 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_DYNZD -USE MODD_FRC -USE MODD_REF -USE MODD_SERIES, ONLY: LSERIES -USE MODD_TIME -USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI -USE MODD_NESTING -USE MODD_PASPOL -USE MODD_DRAGTREE -USE MODD_METRICS_n USE MODD_DYN_n +USE MODD_DYNZD USE MODD_DYNZD_n +USE MODD_ELEC_n, only: XCION_POS_FW, XCION_NEG_FW USE MODD_FIELD_n -USE MODD_PAST_FIELD_n -USE MODD_MEAN_FIELD_n -USE MODD_MEAN_FIELD -USE MODD_ADV_n -USE MODD_LSFIELD_n -USE MODD_GRID_n -USE MODD_GRID, ONLY: XLONORI,XLATORI -USE MODD_TIME_n -USE MODD_REF_n +#ifdef MNH_FOREFIRE +USE MODD_FOREFIRE +USE MODD_FOREFIRE_n +#endif +USE MODD_FRC USE MODD_FRC_n -USE MODD_CURVCOR_n -USE MODD_DIM_n -USE MODD_BUDGET -USE MODD_RADIATIONS_n -USE MODD_SHADOWS_n -USE MODD_PARAM_RAD_n, ONLY : CLW, CAER, CAOP -USE MODD_VAR_ll, ONLY : IP -! -USE MODD_STAND_ATM, ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM -USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, & - CCHEM_INPUT_FILE, LCH_CONV_LINOX, & - XCH_TUV_DOBNEW, LCH_PH, CSPEC_BUDGET, CSPEC_PRODLOSS -USE MODD_CH_PH_n -USE MODD_CH_AEROSOL, ONLY : LORILAM -USE MODD_CH_AERO_n, ONLY : XSOLORG,XMI -USE MODD_CH_FLX_n, ONLY : XCHFLX +USE MODD_GET_n +USE MODD_GRID_n +USE MODD_GRID, only: XLONORI,XLATORI +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_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_OUT_n +USE MODD_PARAMETERS USE MODD_PARAM_KAFR_n USE MODD_PARAM_MFSHALL_n -USE MODD_DEEP_CONVECTION_n -USE MODD_OUT_n -USE MODD_BIKHARDT_n -USE MODD_NUDGING_n, ONLY : LNUDGING -USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG, CSPEC_BU_DIAG -USE MODD_CLOUD_MF_n -USE MODD_NSV -! -USE MODD_ELEC_n, ONLY : XCION_POS_FW, XCION_NEG_FW - -USE MODD_LUNIT_n -USE MODD_CONF_n -USE MODD_GET_n -USE MODD_TURB_n -USE MODD_CTURB -USE MODD_LBC_n +USE MODD_PARAM_n +USE MODD_PARAM_RAD_n, only: CAER, CAOP, CLW +USE MODD_PASPOL USE MODD_PASPOL_n -USE MODD_DRAG_n -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n -! -! -USE MODI_INI_BUDGET -USE MODI_INI_SW_SETUP -USE MODI_INI_LW_SETUP -USE MODI_SET_GRID -USE MODI_METRICS -USE MODI_UPDATE_METRICS -USE MODI_READ_FIELD -USE MODI_SET_REF -USE MODI_INI_DYNAMICS -USE MODI_INI_TKE_EPS -USE MODI_SET_DIRCOS -USE MODI_INI_CPL -USE MODI_INI_RADIATIONS -USE MODI_INI_RADIATIONS_ECMWF -USE MODI_INI_RADIATIONS_ECRAD +USE MODD_PAST_FIELD_n +use modd_precision, only: LFIINT +USE MODD_RADIATIONS_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_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_INI_DEEP_CONVECTION -USE MODI_INI_BIKHARDT_n -USE MODI_INI_ONE_WAY_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_SPAWN_LS_n -USE MODI_INI_AIRCRAFT_BALLOON -USE MODI_UPDATE_NSV -USE MODI_INI_ELEC_n -USE MODI_INI_MICRO_n -USE MODI_INI_LG -USE MODI_SURF_SOLAR_GEOM -USE MODI_SUNPOS_n -USE MODI_INI_SURF_RAD -USE MODI_MNHGET_SURF_PARAM_n -USE MODI_MNHREAD_ZS_DUMMY_n -USE MODI_INIT_GROUND_PARAM_n -USE MODI_INI_AIRCRAFT_BALLOON -USE MODI_INI_SURFSTATION_n -USE MODI_INI_POSPROFILER_n -USE MODI_CH_INIT_JVALUES -USE MODI_CH_AER_MOD_INIT -! -USE MODD_PARAM_n -USE MODE_MODELN_HANDLER -USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll -! 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_BUDGET +USE MODI_INI_CPL +USE MODI_INI_DEEP_CONVECTION USE MODI_INI_DRAG -! -#ifdef MNH_FOREFIRE -USE MODD_FOREFIRE -USE MODD_FOREFIRE_n -USE MODI_INIT_FOREFIRE_n -#endif +USE MODI_INI_DYNAMICS +USE MODI_INI_ELEC_n USE MODI_INI_LES_N -USE MODD_MNH_SURFEX_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 -! Eddy fluxes ! Ajout PP -USE MODD_DEF_EDDY_FLUX_n ! for VT and WT fluxes -USE MODD_DEF_EDDYUV_FLUX_n ! FOR UV -USE MODD_LATZ_EDFLX -USE MODD_ADVFRC_n -USE MODD_RELFRC_n -USE MODD_2D_FRC -USE MODD_IO_SURF_MNH, ONLY : IO_SURF_MNH_MODEL -USE MODD_IO_ll, ONLY : CIO_DIR,TFILEDATA,TFILE_DUMMY,TFILE_FIRST,TFILE_LAST -! -USE MODD_CH_PRODLOSSTOT_n -USE MODI_CH_INIT_PRODLOSSTOT_n -! -USE MODD_CH_BUDGET_n -USE MODI_CH_INIT_BUDGET_n -USE MODD_CH_M9_n, ONLY:NNONZEROTERMS -! -USE MODE_MPPDB +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_ECRAD -USE YOERDI , ONLY :RCCO2 +#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 ! IMPLICIT NONE ! @@ -460,7 +464,6 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KMI ! Model Index -CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing of nested models TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file ! !* 0.2 declarations of local variables @@ -564,11 +567,11 @@ ILUOUT = TLUOUT%NLU !* 2.1 Read number of forcing fields ! IF (LFORCING) THEN ! Retrieve the number of time-dependent forcings. - CALL IO_READ_FIELD(TPINIFILE,'FRC',NFRC,IRESP) + 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_READ_FIELD" + " but no fields have been found by IO_Field_read" !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') END IF @@ -577,11 +580,11 @@ 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_READ_FIELD(TPINIFILE,'NADVFRC1',NADVFRC,IRESP) + 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_READ_FIELD" + " but no fields have been found by IO_Field_read" !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') END IF @@ -590,11 +593,11 @@ 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_READ_FIELD(TPINIFILE,'NRELFRC1',NRELFRC,IRESP) + 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_READ_FIELD" + " but no fields have been found by IO_Field_read" !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','') END IF @@ -605,8 +608,8 @@ END IF IKU=NKMAX+2*JPVEXT ! ALLOCATE(XZHAT(IKU)) -CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) -CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP) +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,")" @@ -897,6 +900,7 @@ 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 ! @@ -909,6 +913,7 @@ ALLOCATE(XRHODREF(IIU,IJU,IKU)) ALLOCATE(XTHVREF(IIU,IJU,IKU)) ALLOCATE(XEXNREF(IIU,IJU,IKU)) ALLOCATE(XRHODJ(IIU,IJU,IKU)) +!$acc enter data create(XRHODJ) IF (CEQNSYS=='DUR' .AND. LUSERV) THEN ALLOCATE(XRVREF(IIU,IJU,IKU)) ELSE @@ -1128,9 +1133,7 @@ ELSE ! 3D case " Local domain to small for relaxation NRIMX,IDIMX ", & NRIMX,IDIMX ,& " change relaxation parameters or number of processors " - !callabortstop - CALL ABORT - STOP + call Print_msg(NVERB_FATAL,'GEN','INI_MODEL_n','') END IF END IF IF ( CLBCY(1) /= 'CYCL' ) THEN @@ -1140,9 +1143,7 @@ ELSE ! 3D case " Local domain to small for relaxation NRIMY,IDIMY ", & NRIMY,IDIMY ,& " change relaxation parameters or number of processors " - !callabortstop - CALL ABORT - STOP + call Print_msg(NVERB_FATAL,'GEN','INI_MODEL_n','') END IF END IF IF ( LHORELAX_UVWTH ) THEN @@ -1536,8 +1537,7 @@ IF (KMI == 1) THEN ALLOCATE(XUFRC_PAST(0,0,0)) ALLOCATE(XVFRC_PAST(0,0,0)) END IF -ELSE - !Do not allocate because they are the same on all grids (not 'n' variables) + END IF ! ---------------------------------------------------------------------- ! @@ -1689,9 +1689,9 @@ 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,'DIACHRONIC','WRITE', & - HDIRNAME=CIO_DIR, & - KLFINPRAR=INT(50,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=NVERB, & + 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 ! @@ -1707,6 +1707,13 @@ IF (KMI == 1) THEN IF ( NDAD(KMI) == 7) CDAD_NAME(KMI) = CEXP//'.7.'//CSEG IF ( NDAD(KMI) == 8) CDAD_NAME(KMI) = CEXP//'.8.'//CSEG 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 ! !------------------------------------------------------------------------------- @@ -1714,12 +1721,7 @@ END IF !* 7. INITIALIZE GRIDS AND METRIC COEFFICIENTS ! ---------------------------------------- ! -CALL SET_GRID(KMI,TPINIFILE,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll, & - XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & - XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & - NXOR_ALL(KMI),NYOR_ALL(KMI),NXEND_ALL(KMI),NYEND_ALL(KMI), & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - CLBCX,CLBCY, & +CALL SET_GRID(KMI,TPINIFILE,IKU,NIMAX_ll,NJMAX_ll, & XTSTEP,XSEGLEN, & XLONORI,XLATORI,XLON,XLAT, & XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & @@ -1848,9 +1850,9 @@ IF (CELEC == 'NONE') THEN ! -------------------------------------- ! ELSE - CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, HLUOUT, TPINIFILE, & - XTSTEP, XZZ, & - XDXX, XDYY, XDZZ, XDZX, XDZY ) + 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)')& @@ -1944,6 +1946,7 @@ IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN ENDDO ! END IF +ALLOCATE(XLSZWSM(IIU,IJU)) ; XLSZWSM = -1. ! IF ( KMI > 1) THEN ! Use dummy pointers to correct an ifort BUG @@ -2025,20 +2028,20 @@ IF ( KMI > 1) THEN DPTR_XLBYRM=>XLBYRM DPTR_XLBXSVM=>XLBXSVM DPTR_XLBYSVM=>XLBYSVM - CALL INI_ONE_WAY_n(NDAD(KMI),CLUOUT,XTSTEP,KMI,1, & - 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),NDTRATIO(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 ) + 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 ! ! @@ -2057,7 +2060,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, & @@ -2101,7 +2104,7 @@ IF (CRAD /= 'NONE') THEN ELSE GINIRAD =.FALSE. END IF - CALL INI_RADIATIONS(TPINIFILE,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, & + CALL INI_RADIATIONS(TPINIFILE,GINIRAD,TDTCUR,TDTEXP,XZZ, & XDXX, XDYY, & XSINDEL,XCOSDEL,XTSIDER,XCORSOL, & XSLOPANG,XSLOPAZI, & @@ -2162,7 +2165,7 @@ ALLOCATE(ZEMIS (IIU,IJU,NLWB_MNH)) ALLOCATE(ZTSRAD (IIU,IJU)) ! IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN - CALL IO_READ_FIELD(TPINIFILE,'SURF',CSURF) + CALL IO_Field_read(TPINIFILE,'SURF',CSURF) ELSE CSURF = "EXTE" END IF @@ -2171,8 +2174,8 @@ 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),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_FILE_OPEN_ll(TINIFILEPGD,OPARALLELIO=.FALSE.,KRESP=IRESP) + 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 @@ -2211,11 +2214,12 @@ ELSE 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),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) - CALL IO_FILE_OPEN_ll(TINIFILEPGD,OPARALLELIO=.FALSE.,KRESP=IRESP) + 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 @@ -2272,8 +2276,21 @@ IF (CRAD == 'ECMW') THEN ZBARE(:,:) = 0. END IF ! - CALL INI_RADIATIONS_ECMWF (TPINIFILE%CNAME,HLUOUT, & - XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, & + IF ( CAOP=='EXPL' .AND. LDUST ) 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 ) 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 ) ! @@ -2299,9 +2316,8 @@ ELSE IF (CRAD == 'ECRA') THEN ZTOWN(:,:) = 0. ZBARE(:,:) = 0. END IF -! - CALL INI_RADIATIONS_ECRAD (TPINIFILE%CNAME,HLUOUT, & - XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP, & +! + 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 ) @@ -2334,7 +2350,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN IF (NVERB>=10) THEN WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV END IF - CALL INI_DEEP_CONVECTION (TPINIFILE,HLUOUT,GINIDCONV,TDTCUR, & + CALL INI_DEEP_CONVECTION (TPINIFILE,GINIDCONV,TDTCUR, & NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV, & XDRICONV,XPRCONV,XPRSCONV,XPACCONV, & XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,& @@ -2423,12 +2439,17 @@ CALL INI_POSPROFILER_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & !* 26. Prognostic aerosols ! ------------------------ ! -CALL INI_AEROSET1 -CALL INI_AEROSET2 -CALL INI_AEROSET3 -CALL INI_AEROSET4 -CALL INI_AEROSET5 -CALL INI_AEROSET6 +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 ! !------------------------------------------------------------------------------- diff --git a/ini_spectren.f90 b/ini_spectren.f90 index 5c33f6a1d..478344320 100644 --- a/ini_spectren.f90 +++ b/ini_spectren.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!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. @@ -9,12 +9,11 @@ ! INTERFACE ! - SUBROUTINE INI_SPECTRE_n(KMI,HLUOUT,TPINIFILE) + SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE) ! - USE MODD_IO_ll, ONLY: TFILEDATA + USE MODD_IO, ONLY: TFILEDATA ! INTEGER, INTENT(IN) :: KMI ! Model index - CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! Name for output-listing of nested models TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file ! END SUBROUTINE INI_SPECTRE_n @@ -22,9 +21,9 @@ END SUBROUTINE INI_SPECTRE_n END INTERFACE ! END MODULE MODI_INI_SPECTRE_n -! ###################################################### - SUBROUTINE INI_SPECTRE_n(KMI,HLUOUT,TPINIFILE) -! ###################################################### +! ####################################### + SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE) +! ####################################### ! !!**** *INI_SPECTRE_n* - routine to initialize SPECTRE (based on ini_modeln.f90) !! @@ -35,21 +34,21 @@ END MODULE MODI_INI_SPECTRE_n !! 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 -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -!! +! 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_AERO_n, ONLY: XSOLORG,XMI -USE MODD_CH_AEROSOL, ONLY: LORILAM -USE MODD_CH_MNHC_n, ONLY: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, & - CCHEM_INPUT_FILE, LCH_CONV_LINOX, & - XCH_TUV_DOBNEW, LCH_PH +USE MODD_CH_MNHC_n, ONLY: LUSECHAQ, LUSECHIC, LCH_INIT_FIELD USE MODD_CH_PH_n USE MODD_CLOUD_MF_n USE MODD_CST @@ -58,7 +57,6 @@ USE MODD_CONF_n USE MODD_CTURB USE MODD_CURVCOR_n USE MODD_DEEP_CONVECTION_n -USE MODD_DIAG_FLAG, ONLY: LCHEMDIAG USE MODD_DIM_n USE MODD_DRAGTREE USE MODD_DUST @@ -66,29 +64,26 @@ 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_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_ll, ONLY: TFILEDATA -USE MODD_LBC_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 +USE MODD_NESTING, only: NDAD, NDT_2_WAY, NDXRATIO_ALL, NDYRATIO_ALL USE MODD_NSV -USE MODD_NUDGING_n, ONLY: LNUDGING 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: CLW, CAER USE MODD_PASPOL USE MODD_PASPOL_n USE MODD_BLOWSNOW @@ -97,20 +92,16 @@ USE MODD_PAST_FIELD_n USE MODD_RADIATIONS_n USE MODD_REF USE MODD_REF_n -USE MODD_SERIES, ONLY: LSERIES USE MODD_SHADOWS_n USE MODD_SPECTRE -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 MODD_ARGSLIST_ll, ONLY: LIST_ll -USE MODE_FMREAD USE MODE_GATHER_ll -USE MODE_IO_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 @@ -120,7 +111,6 @@ USE MODE_TYPE_ZDIFFU USE MODI_INI_BIKHARDT_n USE MODI_INI_CPL USE MODI_INI_DYNAMICS -USE MODI_INI_ONE_WAY_n USE MODI_INI_SPAWN_LS_n USE MODI_GET_SIZEX_LB USE MODI_GET_SIZEY_LB @@ -136,12 +126,10 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! Name for output-listing of nested models TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file ! !* 0.2 declarations of local variables ! -INTEGER :: JSV ! Loop index INTEGER :: ILUOUT ! Logical unit number of output-listing INTEGER :: IIU ! Upper dimension in x direction (local) INTEGER :: IJU ! Upper dimension in y direction (local) @@ -149,10 +137,6 @@ 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 ! ! TYPE(LIST_ll), POINTER :: TZINITHALO2D_ll ! pointer for the list of 2D fields @@ -169,14 +153,6 @@ 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 :: ZCOVER ! surface cover types -INTEGER :: ICOVER ! number of cover types -! -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 !------------------------------------------ ! Dummy pointers needed to correct an ifort Bug REAL, DIMENSION(:), POINTER :: DPTR_XZHAT @@ -225,8 +201,8 @@ ILUOUT = TLUOUT%NLU IKU=NKMAX+2*JPVEXT ! ALLOCATE(XZHAT(IKU)) -CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) -CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP) +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,")" @@ -511,9 +487,7 @@ ELSE ! 3D case " Local domain to small for relaxation NRIMX+2*JPHEXT,IIU ", & NRIMX+2*JPHEXT,IIU ,& " change relaxation parameters or number of processors " - !callabortstop - CALL ABORT - STOP + call Print_msg(NVERB_FATAL,'GEN','INI_SPECTRE_n','') END IF END IF IF ( CLBCY(1) /= 'CYCL' ) THEN @@ -523,9 +497,7 @@ ELSE ! 3D case " Local domain to small for relaxation NRIMY+2*JPHEXT,IJU ", & NRIMY+2*JPHEXT,IJU ,& " change relaxation parameters or number of processors " - !callabortstop - CALL ABORT - STOP + call Print_msg(NVERB_FATAL,'GEN','INI_SPECTRE_n','') END IF END IF IF ( LHORELAX_UVWTH ) THEN @@ -710,12 +682,7 @@ CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI) !* 6. INITIALIZE GRIDS AND METRIC COEFFICIENTS ! ---------------------------------------- ! -CALL SET_GRID(KMI,TPINIFILE,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll, & - XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, & - XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, & - NXOR_ALL(KMI),NYOR_ALL(KMI),NXEND_ALL(KMI),NYEND_ALL(KMI), & - NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI), & - CLBCX,CLBCY, & +CALL SET_GRID(KMI,TPINIFILE,IKU,NIMAX_ll,NJMAX_ll, & XTSTEP,XSEGLEN, & XLONORI,XLATORI,XLON,XLAT, & XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & @@ -746,27 +713,27 @@ NDT_2_WAY(KMI)=4 IF (LSPECTRE_U) THEN ALLOCATE(XUT(IIU,IJU,IKU)) ; XUT = 0.0 - CALL IO_READ_FIELD(TPINIFILE,'UT',XUT) + CALL IO_Field_read(TPINIFILE,'UT',XUT) END IF ! IF (LSPECTRE_V) THEN ALLOCATE(XVT(IIU,IJU,IKU)) ; XVT = 0.0 - CALL IO_READ_FIELD(TPINIFILE,'VT',XVT) + CALL IO_Field_read(TPINIFILE,'VT',XVT) END IF ! IF (LSPECTRE_W) THEN ALLOCATE(XWT(IIU,IJU,IKU)) ; XWT = 0.0 - CALL IO_READ_FIELD(TPINIFILE,'WT',XWT) + CALL IO_Field_read(TPINIFILE,'WT',XWT) END IF ! IF (LSPECTRE_TH) THEN ALLOCATE(XTHT(IIU,IJU,IKU)) ; XTHT = 0.0 - CALL IO_READ_FIELD(TPINIFILE,'THT',XTHT) + CALL IO_Field_read(TPINIFILE,'THT',XTHT) END IF ! IF (LSPECTRE_RV) THEN ALLOCATE(XRT(IIU,IJU,IKU,NRR)) - CALL IO_READ_FIELD(TPINIFILE,'RVT',XRT(:,:,:,1)) + CALL IO_Field_read(TPINIFILE,'RVT',XRT(:,:,:,1)) END IF ! !------------------------------------------------------------------------------- @@ -895,20 +862,20 @@ IF ( KMI > 1) THEN DPTR_XLBYRM=>XLBYRM DPTR_XLBXSVM=>XLBXSVM DPTR_XLBYSVM=>XLBYSVM - CALL INI_ONE_WAY_n(NDAD(KMI),HLUOUT,XTSTEP,KMI,1, & - 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),NDTRATIO(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 ) + 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 ! ! @@ -927,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, & @@ -972,4 +939,3 @@ DEALLOCATE(ZJ) ! END SUBROUTINE INI_SPECTRE_n - diff --git a/modeln.f90 b/modeln.f90 index 1080c4b61..0b0f5b1b8 100644 --- a/modeln.f90 +++ b/modeln.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2020 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ################### @@ -62,7 +62,7 @@ END MODULE MODI_MODEL_n !! !! EXTERNAL !! -------- -!! Subroutine IO_FILE_OPEN_ll: to open a file +!! Subroutine IO_File_open: to open a file !! Subroutine WRITE_DESFM: to write the descriptive part of a FMfile !! Subroutine WRITE_LFIFM: to write the binary part of a FMfile !! Subroutine SET_MASK : to compute all the masks selected for budget @@ -89,7 +89,7 @@ END MODULE MODI_MODEL_n !! compute the large scale fields, used to !! couple Model_n with outer informations. !! Subroutine ENDSTEP_BUDGET: writes the budget informations. -!! Subroutine IO_FILE_CLOSE_ll: closes a file +!! Subroutine IO_File_close: closes a file !! Subroutine DATETIME_CORRECTDATE: transform the current time in GMT !! Subroutine FORCING : computes forcing terms !! Subroutine ADD3DFIELD_ll : add a field to 3D-list @@ -253,8 +253,19 @@ END MODULE MODI_MODEL_n !! 01/2018 (C.Lac) Add VISCOSITY !! Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll ! to allow to disable writes (for bench purposes) +! P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines +! (nsubfiles_ioz is now determined in IO_File_add2list) !! 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 28/03/2019: use MNHTIME for time measurement variables +! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing +! P. Wautelet 19/04/2019: removed unused dummy arguments and variables +! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! J. Escobar 09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T +! J. Escobar 09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer +! P. Wautelet 23/07/2019: OpenACC: move data creations from resolved_cloud to modeln and optimize updates +! J. Escobar 27/09/2019: add missing report timing of RESOLVED_ELEC !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -265,18 +276,17 @@ USE MODD_ADV_n USE MODD_AIRCRAFT_BALLOON USE MODD_BAKOUT USE MODD_BIKHARDT_n -USE MODD_BLANK +USE MODD_BLANK USE MODD_BUDGET USE MODD_CH_AERO_n, ONLY: XSOLORG, XMI USE MODD_CH_MNHC_n, ONLY: LUSECHEM,LCH_CONV_LINOX,LUSECHAQ,LUSECHIC, & LCH_INIT_FIELD -USE MODD_CLOUD_MF_n +USE MODD_CLOUD_MF_n USE MODD_VISCOSITY USE MODD_DRAG_n USE MODD_CLOUDPAR_n USE MODD_CONF USE MODD_CONF_n -USE MODD_CST, ONLY: XMD USE MODD_CURVCOR_n USE MODD_DEEP_CONVECTION_n USE MODD_DIM_n @@ -293,7 +303,7 @@ USE MODD_GET_n USE MODD_GRID, ONLY: XLONORI,XLATORI USE MODD_GRID_n USE MODD_ICE_C1R3_DESCR, ONLY: XRTMIN_C1R3=>XRTMIN -USE MODD_IO_ll, ONLY: LIO_NO_WRITE, TFILEDATA,TFILE_SURFEX,TFILE_DUMMY +USE MODD_IO, ONLY: LIO_NO_WRITE, TFILEDATA, TFILE_SURFEX, TFILE_DUMMY USE MODD_LBC_n USE MODD_LES USE MODD_LES_BUDGET @@ -313,16 +323,17 @@ USE MODD_PARAM_C1R3, ONLY: NSEDI => LSEDI, NHHONI => LHHONI USE MODD_PARAM_C2R2, ONLY: NSEDC => LSEDC, NRAIN => LRAIN, NACTIT => LACTIT,LACTTKE,LDEPOC USE MODD_PARAMETERS USE MODD_PARAM_ICE, ONLY: LWARM,LSEDIC,LCONVHG,LDEPOSC -USE MODD_PARAM_LIMA, ONLY: MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, LACTI, & - MACTIT => LACTIT, LSCAV, NMOD_CCN, LCOLD, & - MSEDI => LSEDI, MHHONI => LHHONI, NMOD_IFN, LHAIL, & +USE MODD_PARAM_LIMA, ONLY: MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, & + MACTIT => LACTIT, LSCAV, LCOLD, & + MSEDI => LSEDI, MHHONI => LHHONI, LHAIL, & XRTMIN_LIMA=>XRTMIN, MACTTKE=>LACTTKE USE MODD_BLOWSNOW_n -USE MODD_BLOWSNOW +USE MODD_BLOWSNOW USE MODD_PARAM_MFSHALL_n USE MODD_PARAM_n USE MODD_PAST_FIELD_n USE MODD_PRECIP_n +use modd_precision, only: MNHTIME USE MODD_PROFILER_n USE MODD_RADIATIONS_n, ONLY: XTSRAD,XSCAFLASWD,XDIRFLASWD,XDIRSRFSWD, XAER, XDTHRAD USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN @@ -333,29 +344,31 @@ USE MODD_SERIES_n, ONLY: NFREQSERIES USE MODD_STATION_n USE MODD_SUB_MODEL_n USE MODD_TIME -USE MODD_TIME_n +USE MODD_TIME_n USE MODD_TIMEZ USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI USE MODD_TURB_n ! USE MODE_DATETIME USE MODE_ELEC_ll -USE MODE_FM -USE MODE_GRIDCART +USE MODE_GRIDCART USE MODE_GRIDPROJ -USE MODE_IO_ll -USE MODE_IO_WRITE_FIELD +USE MODE_IO_FIELD_WRITE, only: IO_Field_user_write, IO_Fieldlist_write, IO_Header_write +USE MODE_IO_FILE, only: IO_File_close, IO_File_open +USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list USE MODE_ll USE MODE_MNH_TIMING USE MODE_MODELN_HANDLER USE MODE_MPPDB +USE MODE_ONE_WAY_n ! USE MODI_ADVECTION_METSV -USE MODI_ADVECTION_UVW -USE MODI_ADVECTION_UVW_CEN +USE MODI_ADVECTION_UVW +USE MODI_ADVECTION_UVW_CEN USE MODI_ADV_FORCING_n USE MODI_AER_MONITOR_n USE MODI_AIRCRAFT_BALLOON +USE MODI_BLOWSNOW USE MODI_BOUNDARIES USE MODI_BUDGET_FLAGS USE MODI_CART_COMPRESS @@ -370,7 +383,7 @@ USE MODI_FORCING USE MODI_FORC_SQUALL_LINE USE MODI_FORC_WIND USE MODI_GET_HALO -USE MODI_GRAVITY_IMPL +USE MODI_GRAVITY_IMPL USE MODI_INI_DIAG_IN_RUN USE MODI_INI_LG USE MODI_INI_MEAN_FIELD @@ -387,7 +400,6 @@ USE MODI_MNHGET_SURF_PARAM_n USE MODI_MNHWRITE_ZS_DUMMY_n USE MODI_NUDGING USE MODI_NUM_DIFF -USE MODI_ONE_WAY_n USE MODI_PHYS_PARAM_n USE MODI_PRESSUREZ USE MODI_PROFILER_n @@ -415,8 +427,6 @@ USE MODI_WRITE_LFIFMN_FORDIACHRO_n USE MODI_WRITE_PROFILER_n USE MODI_WRITE_SERIES_n USE MODI_WRITE_STATION_n -USE MODI_BLOWSNOW - USE MODI_WRITE_SURF_ATM_N ! IMPLICIT NONE @@ -432,44 +442,19 @@ LOGICAL, INTENT(INOUT):: OEXIT ! INTEGER :: ILUOUT ! Logical unit number for the output listing INTEGER :: IIU,IJU,IKU ! array size in first, second and third dimensions -INTEGER :: IIB,IIE,IJB,IJE,IKB,IKE ! index values for the physical subdomain +INTEGER :: IIB,IIE,IJB,IJE ! index values for the physical subdomain INTEGER :: JSV,JRR ! Loop index for scalar and moist variables INTEGER :: INBVAR ! number of HALO2_lls to allocate -INTEGER :: IRESP ! return code in FM routines INTEGER :: IINFO_ll ! return code of parallel routine INTEGER :: IVERB ! LFI verbosity level LOGICAL :: GSTEADY_DMASS ! conditional call to mass computation ! ! for computing time analysis -REAL*8,DIMENSION(2) :: ZTIME,ZTIME1,ZTIME2,ZEND,ZTOT,ZALL,ZTOT_PT -! -REAL*8,DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME, ZTIME1, ZTIME2, ZEND, ZTOT, ZALL, ZTOT_PT +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS CHARACTER :: YMI INTEGER :: IPOINTS CHARACTER(len=16) :: YTCOUNT,YPOINTS - -REAL :: ZSTAT_CSTORE,ZSTAT_CBOUND,ZSTAT_CGUESS,ZSTAT_CADV,ZSTAT_CSOURCES -REAL :: ZSTAT_CDIFF,ZSTAT_CRELAX,ZSTAT_CPARAM -REAL :: ZSTAT_CSPECTRA,ZSTAT_CRAD_BOUND,ZSTAT_CPRESS -REAL :: ZSTAT_CCLOUD,ZSTAT_CSTEP_SWA,ZSTAT_CSTEP_MISC -REAL :: ZSTAT_CCOUPL,ZSTAT_CSTEP_BUD,ZSTAT_CSTEP_CDRAG -REAL :: ZSTAT_CSTEP_CTRACER,ZSTAT_CSTEP_CELEC -REAL :: SCONV_CTURB,ZSTAT_C1WAY,ZSTAT_C2WAY,ZSTAT_CMAFL -REAL :: ZSTAT_CRAD,ZSTAT_CDCONV,ZSTAT_CGROUND,ZSTAT_CHALO -REAL :: ZSTAT_CFORCING,ZSTAT_CNUDGING,ZSTAT_CCHEM -! -REAL :: ZPERCALL,ZPRICE -REAL :: ZPERCSTORE,ZPERCBOUND,ZPERCGUESS,ZPERCADV,ZPERCSOURCES,ZPERCDRAG -REAL :: ZPERCDIFF,ZPERCRELAX,ZPERCPARAM -REAL :: ZPERCSPECTRA,ZPERCRAD_BOUND,ZPERCPRESS -REAL :: ZPERCCLOUD,ZPERCSTEP_SWA,ZPERCSTEP_MISC -REAL :: ZPERCELEC -REAL :: ZPERCCOUPL,ZPERCSTEP_BUD -REAL :: ZPERCTURB,ZPERC1WAY,ZPERC2WAY -REAL :: ZPERCRAD,ZPERCSHADOWS,ZPERCKAFR,ZPERCGROUND,ZPERCHALO,ZPERCMAFL,ZPERTRACER -REAL :: ZPERCFORCING,ZPERCNUDGING,ZPERCCHEM -REAL :: ZTSTEP_UVW ! Double timestep except for cold start (single) -REAL :: ZTSTEP_MET,ZTSTEP_SV ! Effective time step for advection ! INTEGER :: ISYNCHRO ! model synchronic index relative to its father ! = 1 for the first time step in phase with DAD @@ -512,46 +497,34 @@ REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV LOGICAL, DIMENSION(:,:),POINTER :: DPTR_GMASKkids ! -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDC -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDR -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDS -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDG -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDH -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRC3D -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRS3D -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRG3D -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRH3D -! -LOGICAL :: KWARM -LOGICAL :: KRAIN -LOGICAL :: KSEDC +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDC +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDR +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDS +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDG +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDH +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRC3D +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRS3D +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRG3D +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRH3D +! +LOGICAL :: KWARM +LOGICAL :: KRAIN +LOGICAL :: KSEDC LOGICAL :: KACTIT LOGICAL :: KSEDI LOGICAL :: KHHONI -REAL :: TEMPS -INTEGER :: NSV_END -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=LEN_HREC) :: YRECFM ! Name of the desired field in LFIFM file ! -INTEGER :: ILENG ! Length of comment string in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -! -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPABST !To give pressure at t +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRUS,ZRVS,ZRWS +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZPABST !To give pressure at t ! (and not t+1) to resolved_cloud -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZJ -! -! for various testing -INTEGER :: IK -REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZTMP +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! TYPE(LIST_ll), POINTER :: TZFIELDC_ll ! list of fields to exchange TYPE(HALO2LIST_ll), POINTER :: TZHALO2C_ll ! list of fields to exchange LOGICAL :: GCLD ! conditionnal call for dust wet deposition LOGICAL :: GCLOUD_ONLY ! conditionnal radiation computations for ! the only cloudy columns -REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER) :: ZWETDEPAER +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZWETDEPAER ! @@ -561,6 +534,16 @@ TYPE(TFILEDATA),POINTER :: TZBAKFILE, TZOUTFILE ! TZBAKFILE=> NULL() TZOUTFILE=> NULL() + +allocate( ZRUS (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) ) +allocate( ZRVS (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) ) +allocate( ZRWS (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) ) +allocate( ZPABST(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) ) +allocate( ZJ (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) ) +allocate( ZWETDEPAER(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER) ) + +!$acc data create( zrws ) + ! !* 0. MICROPHYSICAL SCHEME ! ------------------- @@ -610,8 +593,6 @@ ILUOUT = TLUOUT%NLU CALL GET_DIM_EXT_ll('B',IIU,IJU) IKU=NKMAX+2*JPVEXT CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IKB=1+JPVEXT -IKE=IKU-JPVEXT ! IF (IMI==1) THEN GSTEADY_DMASS=LSTEADYLS @@ -623,12 +604,13 @@ END IF ! IF (KTCOUNT == 1) THEN ! - NULLIFY(TZFIELDS_ll,TZLSFIELD_ll,TZFIELDT_ll) - NULLIFY(TZHALO2T_ll) - NULLIFY(TZLSHALO2_ll) - NULLIFY(TZFIELDSC_ll) + NULLIFY(TFIELDS_ll,TLSFIELD_ll,TFIELDT_ll) + NULLIFY(TLSFIELD2D_ll) + NULLIFY(THALO2T_ll) + NULLIFY(TLSHALO2_ll) + NULLIFY(TFIELDSC_ll) ! - ALLOCATE(ZWT_ACT_NUC(SIZE(XWT,1),SIZE(XWT,2),SIZE(XWT,3))) + ALLOCATE(XWT_ACT_NUC(SIZE(XWT,1),SIZE(XWT,2),SIZE(XWT,3))) ALLOCATE(GMASKkids(SIZE(XWT,1),SIZE(XWT,2))) ! ! initialization of the FM file backup/output number @@ -636,9 +618,9 @@ IF (KTCOUNT == 1) THEN IOUT=0 ! IF ( .NOT. LIO_NO_WRITE ) THEN - CALL IO_FILE_OPEN_ll(TDIAFILE) + CALL IO_File_open(TDIAFILE) ! - CALL IO_WRITE_HEADER(TDIAFILE) + CALL IO_Header_write(TDIAFILE) CALL WRITE_DESFM_n(IMI,TDIAFILE) CALL WRITE_LFIFMN_FORDIACHRO_n(TDIAFILE) END IF @@ -647,109 +629,101 @@ IF (KTCOUNT == 1) THEN ! ! a) Sources terms ! - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRUS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRVS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRWS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTHS) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRUS_PRES) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRVS_PRES) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRWS_PRES) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTHS_CLD) - IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTKES) - DO JRR=1,NRR - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRRS(:,:,:,JRR)) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRRS_CLD(:,:,:,JRR)) - ENDDO - DO JSV=1,NSV - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRSVS(:,:,:,JSV)) - CALL ADD3DFIELD_ll(TZFIELDS_ll, XRSVS_CLD(:,:,:,JSV)) - ENDDO - IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDS_ll, XSRCT) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS, 'MODEL_n::XRUS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS, 'MODEL_n::XRVS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS, 'MODEL_n::XRWS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS, 'MODEL_n::XRTHS' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS_PRES, 'MODEL_n::XRUS_PRES' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS_PRES, 'MODEL_n::XRVS_PRES' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS_PRES, 'MODEL_n::XRWS_PRES' ) + CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS_CLD, 'MODEL_n::XRTHS_CLD' ) + IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XRTKES, 'MODEL_n::XRTKES' ) + CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS (:,:,:,1:NRR), 'MODEL_n::XRRS' ) + CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS_CLD (:,:,:,1:NRR), 'MODEL_n::XRRS_CLD' ) + CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS (:,:,:,1:NSV), 'MODEL_n::XRSVS') + CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS_CLD(:,:,:,1:NSV), 'MODEL_n::XRSVS_CLD') + IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XSRCT, 'MODEL_n::XSRCT' ) ! IF ((LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN ! ! b) LS fields ! - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSUM) - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSVM) - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSWM) - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSTHM) - CALL ADD2DFIELD_ll(TZLSFIELD_ll, XLSZWSM) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSUM, 'MODEL_n::XLSUM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSVM, 'MODEL_n::XLSVM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSWM, 'MODEL_n::XLSWM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSTHM, 'MODEL_n::XLSTHM' ) + CALL ADD2DFIELD_ll( TLSFIELD2D_ll, XLSZWSM, 'MODEL_n::XLSZWSM' ) IF (NRR >= 1) THEN - CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSRVM) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' ) ENDIF ! ! c) Fields at t ! - CALL ADD3DFIELD_ll(TZFIELDT_ll, XUT) - CALL ADD3DFIELD_ll(TZFIELDT_ll, XVT) - CALL ADD3DFIELD_ll(TZFIELDT_ll, XWT) - CALL ADD3DFIELD_ll(TZFIELDT_ll, XTHT) - IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDT_ll, XTKET) - DO JRR=1,NRR - CALL ADD3DFIELD_ll(TZFIELDT_ll, XRT(:,:,:,JRR)) - ENDDO - DO JSV=1,NSV - CALL ADD3DFIELD_ll(TZFIELDT_ll, XSVT(:,:,:,JSV)) - ENDDO + CALL ADD3DFIELD_ll( TFIELDT_ll, XUT, 'MODEL_n::XUT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XVT, 'MODEL_n::XVT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XWT, 'MODEL_n::XWT' ) + CALL ADD3DFIELD_ll( TFIELDT_ll, XTHT, 'MODEL_n::XTHT' ) + IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDT_ll, XTKET, 'MODEL_n::XTKET' ) + CALL ADD4DFIELD_ll(TFIELDT_ll, XRT (:,:,:,1:NRR), 'MODEL_n::XSV' ) + CALL ADD4DFIELD_ll(TFIELDT_ll, XSVT(:,:,:,1:NSV), 'MODEL_n::XSVT' ) ! !* 1.5 Initialize the list of fields for the halo updates (2nd layer) ! INBVAR = 4+NRR+NSV IF (SIZE(XRTKES,1) /= 0) INBVAR=INBVAR+1 - CALL INIT_HALO2_ll(TZHALO2T_ll,INBVAR,IIU,IJU,IKU) - CALL INIT_HALO2_ll(TZLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU) + CALL INIT_HALO2_ll(THALO2T_ll,INBVAR,IIU,IJU,IKU) + CALL INIT_HALO2_ll(TLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU) ! !* 1.6 Initialise the 2nd layer of the halo of the LS fields ! IF ( LSTEADYLS ) THEN - CALL UPDATE_HALO_ll(TZLSFIELD_ll, IINFO_ll) - CALL DEL2DFIELD_ll(TZLSFIELD_ll,XLSZWSM,IINFO_ll) - CALL UPDATE_HALO2_ll(TZLSFIELD_ll, TZLSHALO2_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) + CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll) END IF END IF ! ! ! - XT_START = 0.0 - ! - XT_STORE = 0.0 - XT_BOUND = 0.0 - XT_GUESS = 0.0 - XT_FORCING = 0.0 - XT_NUDGING = 0.0 - XT_ADV = 0.0 - XT_ADVUVW = 0.0 - XT_GRAV = 0.0 - XT_SOURCES = 0.0 + XT_START = 0.0_MNHTIME ! - XT_DIFF = 0.0 - XT_RELAX = 0.0 - XT_PARAM = 0.0 - XT_SPECTRA = 0.0 - XT_HALO = 0.0 - XT_VISC = 0.0 - XT_RAD_BOUND = 0.0 - XT_PRESS = 0.0 + XT_STORE = 0.0_MNHTIME + XT_BOUND = 0.0_MNHTIME + XT_GUESS = 0.0_MNHTIME + XT_FORCING = 0.0_MNHTIME + XT_NUDGING = 0.0_MNHTIME + XT_ADV = 0.0_MNHTIME + XT_ADVUVW = 0.0_MNHTIME + XT_GRAV = 0.0_MNHTIME + XT_SOURCES = 0.0_MNHTIME ! - XT_CLOUD = 0.0 - XT_STEP_SWA = 0.0 - XT_STEP_MISC = 0.0 - XT_COUPL = 0.0 - XT_1WAY = 0.0 - XT_STEP_BUD = 0.0 + XT_DIFF = 0.0_MNHTIME + XT_RELAX = 0.0_MNHTIME + XT_PARAM = 0.0_MNHTIME + XT_SPECTRA = 0.0_MNHTIME + XT_HALO = 0.0_MNHTIME + XT_VISC = 0.0_MNHTIME + XT_RAD_BOUND = 0.0_MNHTIME + XT_PRESS = 0.0_MNHTIME ! - XT_RAD = 0.0 - XT_DCONV = 0.0 - XT_GROUND = 0.0 - XT_TURB = 0.0 - XT_MAFL = 0.0 - XT_DRAG = 0.0 - XT_TRACER = 0.0 - XT_SHADOWS = 0.0 - XT_ELEC = 0.0 - XT_CHEM = 0.0 - XT_2WAY = 0.0 + XT_CLOUD = 0.0_MNHTIME + XT_STEP_SWA = 0.0_MNHTIME + XT_STEP_MISC = 0.0_MNHTIME + XT_COUPL = 0.0_MNHTIME + XT_1WAY = 0.0_MNHTIME + XT_STEP_BUD = 0.0_MNHTIME + ! + XT_RAD = 0.0_MNHTIME + XT_DCONV = 0.0_MNHTIME + XT_GROUND = 0.0_MNHTIME + XT_TURB = 0.0_MNHTIME + XT_MAFL = 0.0_MNHTIME + XT_DRAG = 0.0_MNHTIME + XT_TRACER = 0.0_MNHTIME + XT_SHADOWS = 0.0_MNHTIME + XT_ELEC = 0.0_MNHTIME + XT_CHEM = 0.0_MNHTIME + XT_2WAY = 0.0_MNHTIME ! END IF ! @@ -915,8 +889,6 @@ ZTIME1=ZTIME2 IF( LLG .AND. IMI==1 ) CALL SETLB_LG ! IF (CCONF == "START" .OR. (CCONF == "RESTA" .AND. KTCOUNT /= 1 )) THEN -CALL MPPDB_CHECK3DM("before BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,& - & XUT, XVT, XWT, XTHT, XTKET) CALL BOUNDARIES ( & XTSTEP,CLBCX,CLBCY,NRR,NSV,KTCOUNT, & XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & @@ -925,8 +897,6 @@ CALL BOUNDARIES ( & XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS, & XRHODJ, & XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT ) -CALL MPPDB_CHECK3DM("after BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,& - & XUT, XVT, XWT, XTHT, XTKET) END IF ! CALL SECOND_MNH2(ZTIME2) @@ -951,10 +921,10 @@ IF (IBAK < NBAK_NUMB ) THEN TZBAKFILE => TBACKUPN(IBAK)%TFILE IVERB = TZBAKFILE%NLFIVERB ! - CALL IO_FILE_OPEN_ll(TZBAKFILE) + CALL IO_File_open(TZBAKFILE) ! CALL WRITE_DESFM_n(IMI,TZBAKFILE) - CALL IO_WRITE_HEADER(TBACKUPN(IBAK)%TFILE) + CALL IO_Header_write(TBACKUPN(IBAK)%TFILE) CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,TBACKUPN(IBAK)%TFILE%TDADFILE%CNAME) TOUTDATAFILE => TZBAKFILE CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE) @@ -994,13 +964,13 @@ IF (IOUT < NOUT_NUMB ) THEN ! TZOUTFILE => TOUTPUTN(IOUT)%TFILE ! - CALL IO_FILE_OPEN_ll(TZOUTFILE) + CALL IO_File_open(TZOUTFILE) ! - CALL IO_WRITE_HEADER(TZOUTFILE) - CALL IO_WRITE_FIELDLIST(TOUTPUTN(IOUT)) - CALL IO_WRITE_FIELD_USER(TOUTPUTN(IOUT)) + CALL IO_Header_write(TZOUTFILE) + CALL IO_Fieldlist_write(TOUTPUTN(IOUT)) + CALL IO_Field_user_write(TOUTPUTN(IOUT)) ! - CALL IO_FILE_CLOSE_ll(TZOUTFILE) + CALL IO_File_close(TZOUTFILE) ! END IF END IF @@ -1027,7 +997,7 @@ IF (NBUMOD==IMI .AND. CBUTYPE=='MASK' ) THEN IF (LBU_RV) XBURHODJV(:,NBUTIME,:) = XBURHODJV(:,NBUTIME,:) & + MASK_COMPRESS(MYM(XRHODJ)) IF (LBU_RW) XBURHODJW(:,NBUTIME,:) = XBURHODJW(:,NBUTIME,:) & - + MASK_COMPRESS(MZM(1,IKU,1,XRHODJ)) + + MASK_COMPRESS(MZM(XRHODJ)) IF (ALLOCATED(XBURHODJ)) & XBURHODJ (:,NBUTIME,:) = XBURHODJ (:,NBUTIME,:) & + MASK_COMPRESS(XRHODJ) @@ -1039,7 +1009,7 @@ IF (NBUMOD==IMI .AND. CBUTYPE=='CART' ) THEN IF (LBU_RV) XBURHODJV(:,:,:) = XBURHODJV(:,:,:) & + CART_COMPRESS(MYM(XRHODJ)) IF (LBU_RW) XBURHODJW(:,:,:) = XBURHODJW(:,:,:) & - + CART_COMPRESS(MZM(1,IKU,1,XRHODJ)) + + CART_COMPRESS(MZM(XRHODJ)) IF (ALLOCATED(XBURHODJ)) & XBURHODJ (:,:,:) = XBURHODJ (:,:,:) & + CART_COMPRESS(XRHODJ) @@ -1117,8 +1087,8 @@ IF (NMODEL>1) THEN DPTR_GMASKkids=>GMASKkids ! CALL TWO_WAY( NRR,NSV,KTCOUNT,DPTR_XRHODJ,IMI,XTSTEP, & - DPTR_XUM ,DPTR_XVM ,DPTR_XWM , DPTR_XTHM, DPTR_XRM, DPTR_XTKEM, DPTR_XSVM, & - DPTR_XRUS,DPTR_XRVS,DPTR_XRWS,DPTR_XRTHS,DPTR_XRRS,DPTR_XRTKES,DPTR_XRSVS, & + DPTR_XUM ,DPTR_XVM ,DPTR_XWM , DPTR_XTHM, DPTR_XRM,DPTR_XSVM, & + DPTR_XRUS,DPTR_XRVS,DPTR_XRWS,DPTR_XRTHS,DPTR_XRRS,DPTR_XRSVS, & DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG,DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV, & DPTR_XDIRFLASWD,DPTR_XSCAFLASWD,DPTR_XDIRSRFSWD,DPTR_GMASKkids ) END IF @@ -1227,11 +1197,12 @@ XTIME_LES_BU_PROCESS = 0. ! IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN ! - CALL UPDATE_HALO_ll(TZFIELDT_ll, IINFO_ll) - CALL UPDATE_HALO2_ll(TZFIELDT_ll, TZHALO2T_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TFIELDT_ll, IINFO_ll) + CALL UPDATE_HALO2_ll(TFIELDT_ll, THALO2T_ll, IINFO_ll) IF ( .NOT. LSTEADYLS ) THEN - CALL UPDATE_HALO_ll(TZLSFIELD_ll, IINFO_ll) - CALL UPDATE_HALO2_ll(TZLSFIELD_ll, TZLSHALO2_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll) + CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) + CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll) END IF CALL NUM_DIFF ( CLBCX, CLBCY, NRR, NSV, & XDK2U, XDK4U, XDK2TH, XDK4TH, XDK2SV, XDK4SV, IMI, & @@ -1239,7 +1210,7 @@ IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XRHODJ, & XRUS, XRVS, XRWS, XRTHS, XRTKES, XRRS, XRSVS, & LZDIFFU,LNUMDIFU, LNUMDIFTH, LNUMDIFSV, & - TZHALO2T_ll, TZLSHALO2_ll,XZDIFFU_HALO2 ) + THALO2T_ll, TLSHALO2_ll,XZDIFFU_HALO2 ) END IF ! DO JSV = NSV_CHEMBEG,NSV_CHEMEND @@ -1530,11 +1501,19 @@ ZTIME1 = ZTIME2 XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! +!$acc data create (XUT, XVT, XWT) & +!$acc & copyin (XTHT, XPABST, XRT, XSVT, XRTHS_CLD, XRRS_CLD, XTHVREF) & +!$acc & copy (XRTHS, XRRS, XRUS, XRVS, XRWS) & +!$acc & copy (XRWS_PRES) & !XRWS_PRES copy and not copyout (hidden in UPDATE_HALO) +!$acc & present(XDXX, XDYY, XDZZ, XDZX, XDZY, XRHODJ) +! +!$acc update device(XUT, XVT, XWT, XRHODJ) ! ! -CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,& - & XUT, XVT, XWT, XTHT, XTKET,XRHODJ) - CALL ADVECTION_METSV ( TZBAKFILE, GCLOSE_OUT,CUVW_ADV_SCHEME, & +!$acc data copyin (XTKET, XRSVS_CLD) & +!$acc & copy (XRTKES, XRSVS) & +!$acc & copyout(XRTKEMS) +CALL ADVECTION_METSV ( TZBAKFILE, GCLOSE_OUT,CUVW_ADV_SCHEME, & CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT, & LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT, & CLBCX, CLBCY, NRR, NSV, TDTCUR, XTSTEP, & @@ -1542,8 +1521,7 @@ CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,& XTHVREF, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, & XRTHS, XRRS, XRTKES, XRSVS, & XRTHS_CLD, XRRS_CLD, XRSVS_CLD, XRTKEMS ) -CALL MPPDB_CHECK3DM("after ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ ",PRECISION,& - & XUT, XVT, XWT, XTHT, XTKET,XRHODJ) +!$acc end data ! CALL SECOND_MNH2(ZTIME2) ! @@ -1554,17 +1532,23 @@ ZTIME1 = ZTIME2 XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! -ZRWS = XRWS +!$acc kernels +ZRWS(:,:,:) = XRWS(:,:,:) +!$acc end kernels ! CALL GRAVITY_IMPL ( CLBCX, CLBCY, NRR, NRRL, NRRI,XTSTEP, & XTHT, XRT, XTHVREF, XRHODJ, XRWS, XRTHS, XRRS, & - XRTHS_CLD, XRRS_CLD ) + XRTHS_CLD, XRRS_CLD ) ! ! At the initial instant the difference with the ref state creates a ! vertical velocity production that must not be advected as it is ! compensated by the pressure gradient ! -IF (KTCOUNT == 1 .AND. CCONF=='START') XRWS_PRES = - (XRWS - ZRWS) +IF (KTCOUNT == 1 .AND. CCONF=='START') THEN +!$acc kernels + XRWS_PRES(:,:,:) = ZRWS(:,:,:) - XRWS(:,:,:) +!$acc end kernels +END IF ! CALL SECOND_MNH2(ZTIME2) ! @@ -1574,21 +1558,21 @@ ZTIME1 = ZTIME2 XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! -!MPPDB_CHECK_LB=.TRUE. -CALL MPPDB_CHECK3DM("before ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,& - & XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS) IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN IF (CUVW_ADV_SCHEME=='CEN4TH') THEN NULLIFY(TZFIELDC_ll) NULLIFY(TZHALO2C_ll) - CALL ADD3DFIELD_ll(TZFIELDC_ll, XUT) - CALL ADD3DFIELD_ll(TZFIELDC_ll, XVT) - CALL ADD3DFIELD_ll(TZFIELDC_ll, XWT) + CALL ADD3DFIELD_ll( TZFIELDC_ll, XUT, 'MODEL_n::XUT' ) + CALL ADD3DFIELD_ll( TZFIELDC_ll, XVT, 'MODEL_n::XVT' ) + CALL ADD3DFIELD_ll( TZFIELDC_ll, XWT, 'MODEL_n::XWT' ) CALL INIT_HALO2_ll(TZHALO2C_ll,3,IIU,IJU,IKU) CALL UPDATE_HALO_ll(TZFIELDC_ll,IINFO_ll) CALL UPDATE_HALO2_ll(TZFIELDC_ll, TZHALO2C_ll, IINFO_ll) +!$acc update device(XUT, XVT, XWT) END IF - CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME, & +!$acc data copyin(XUM, XVM, XWM) & +!$acc & copy (XDUM, XDVM, XDWM) + CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME, & CLBCX, CLBCY, & XTSTEP, KTCOUNT, & XUM, XVM, XWM, XDUM, XDVM, XDWM, & @@ -1596,6 +1580,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, & XRUS,XRVS, XRWS, & TZHALO2C_ll ) +!$acc end data IF (CUVW_ADV_SCHEME=='CEN4TH') THEN CALL CLEANLIST_ll(TZFIELDC_ll) NULLIFY(TZFIELDC_ll) @@ -1604,6 +1589,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN END IF ELSE +!$acc data copyin(XRUS_PRES, XRVS_PRES) CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME, & NWENO_ORDER, LSPLIT_WENO, & CLBCX, CLBCY, XTSTEP, & @@ -1611,11 +1597,10 @@ ELSE XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, & XRUS, XRVS, XRWS, & XRUS_PRES, XRVS_PRES, XRWS_PRES ) +!$acc end data END IF ! -CALL MPPDB_CHECK3DM("after ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,& - & XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS) -!MPPDB_CHECK_LB=.FALSE. +!$acc end data ! CALL SECOND_MNH2(ZTIME2) ! @@ -1637,7 +1622,6 @@ END IF ! ZTIME1 = ZTIME2 ! -CALL MPPDB_CHECK3DM("before RAD_BOUND :XRU/V/WS",PRECISION,XRUS,XRVS,XRWS) ZRUS=XRUS ZRVS=XRVS ZRWS=XRWS @@ -1670,7 +1654,6 @@ ZPABST = XPABST ! IF(.NOT. L1D) THEN ! -CALL MPPDB_CHECK3DM("before pressurez:XRU/V/WS",PRECISION,XRUS,XRVS,XRWS) XRUS_PRES = XRUS XRVS_PRES = XRVS XRWS_PRES = XRWS @@ -1774,46 +1757,59 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' .OR. CCLOUD == 'C3R5' & .OR. CCLOUD == "LIMA" ) THEN IF ( LFORCING ) THEN - ZWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWTFRC(:,:,:) + XWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWTFRC(:,:,:) ELSE - ZWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWT_ACT_NUC(:,:,:) = XWT(:,:,:) END IF IF (CTURB /= 'NONE' ) THEN IF ( ((CCLOUD=='C2R2'.OR.CCLOUD=='KHKO').AND.LACTTKE) .OR. (CCLOUD=='LIMA'.AND.MACTTKE) ) THEN - ZWT_ACT_NUC(:,:,:) = ZWT_ACT_NUC(:,:,:) + (2./3. * XTKET(:,:,:))**0.5 + XWT_ACT_NUC(:,:,:) = XWT_ACT_NUC(:,:,:) + (2./3. * XTKET(:,:,:))**0.5 ELSE - ZWT_ACT_NUC(:,:,:) = ZWT_ACT_NUC(:,:,:) + XWT_ACT_NUC(:,:,:) = XWT_ACT_NUC(:,:,:) ENDIF ENDIF ELSE - ZWT_ACT_NUC(:,:,:) = 0. + XWT_ACT_NUC(:,:,:) = 0. END IF ! - XRTHS_CLD = XRTHS - XRRS_CLD = XRRS - XRSVS_CLD = XRSVS + XRTHS_CLD(:, :, : ) = XRTHS(:, :, : ) + XRRS_CLD (:, :, :, : ) = XRRS(:, :, :, : ) + XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : ) +!$acc data present(XRHODJ) & +!$acc & copyin (XZZ, XRHODREF, XEXNREF, ZPABST, XTHT, XSIGS, VSIGQSAT, XMFCONV, XTHM, XPABSM, & +!$acc & XRCM, XWT_ACT_NUC, XDTHRAD, XCF_MF, XRC_MF, XRI_MF, & +!$acc & XSOLORG, XMI) & +!$acc & copy (XSUPSAT, XNACT, XNPRO, XSSPRO, & +!$acc & XRTHS, XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D, & +!$acc & XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP) & +!$acc & copyout(XSRCT, XRAINFR) IF (CSURF=='EXTE') THEN ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ZSEA(:,:) = 0. ZTOWN(:,:)= 0. CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:)) +!$acc data copyin(ZSEA, ZTOWN ) CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & NSPLITG, IMI, KTCOUNT, & CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM, & GCLOSE_OUT, LSUBG_COND,LSIGMAS,CSUBG_AUCV,XTSTEP, & XZZ, XRHODJ, XRHODREF, XEXNREF, & ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM, & - XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & + XPABSM, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & XSRCT, XCLDFR,XCIT, & LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & - XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & +! XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & +! XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & + XINPRC,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS, XINPRG,XINPRH, & +! XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + XSOLORG, XMI, & XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR, & ZSEA, ZTOWN ) +!$acc end data DEALLOCATE(ZTOWN) ELSE CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & @@ -1822,19 +1818,23 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN GCLOSE_OUT, LSUBG_COND,LSIGMAS,CSUBG_AUCV, & XTSTEP,XZZ, XRHODJ, XRHODREF, XEXNREF, & ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM, & - XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & + XPABSM, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & XSRCT, XCLDFR,XCIT, & LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & - XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & +! XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & +! XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & + XINPRC,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS, XINPRG,XINPRH, & +! XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + XSOLORG, XMI, & XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR ) END IF - XRTHS_CLD = XRTHS - XRTHS_CLD - XRRS_CLD = XRRS - XRRS_CLD - XRSVS_CLD = XRSVS - XRSVS_CLD +!$acc end data + XRTHS_CLD(:, :, : ) = XRTHS(:, :, : ) - XRTHS_CLD(:, :, : ) + XRRS_CLD (:, :, :, : ) = XRRS (:, :, :, : ) - XRRS_CLD (:, :, :, : ) + XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : ) - XRSVS_CLD(:, :, :, : ) ! IF (CCLOUD /= 'REVE' ) THEN XACPRR = XACPRR + XINPRR * XTSTEP @@ -1882,7 +1882,7 @@ XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! IF (CELEC /= 'NONE' .AND. (CCLOUD(1:3) == 'ICE')) THEN - ZWT_ACT_NUC(:,:,:) = 0. + XWT_ACT_NUC(:,:,:) = 0. ! XRTHS_CLD = XRTHS XRRS_CLD = XRRS @@ -1967,7 +1967,7 @@ END IF ! ZTIME1 = ZTIME2 ! -CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TZFIELDS_ll, & +CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TFIELDS_ll, & XRUS, XRVS,XRWS,XRTHS,XRRS,XRTKES,XRSVS) ! CALL SECOND_MNH2(ZTIME2) @@ -2081,7 +2081,7 @@ XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU ! IF (GCLOSE_OUT) THEN GCLOSE_OUT=.FALSE. - CALL IO_FILE_CLOSE_ll(TZBAKFILE) + CALL IO_File_close(TZBAKFILE) END IF ! !------------------------------------------------------------------------------- @@ -2117,17 +2117,17 @@ IF (OEXIT) THEN CALL WRITE_LES_n(TDIAFILE,'E') CALL WRITE_LES_n(TDIAFILE,'H') CALL MENU_DIACHRO(TDIAFILE,'END') - CALL IO_FILE_CLOSE_ll(TDIAFILE) + CALL IO_File_close(TDIAFILE) END IF ! - CALL IO_FILE_CLOSE_ll(TINIFILE) - IF (CSURF=="EXTE") CALL IO_FILE_CLOSE_ll(TINIFILEPGD,OPARALLELIO=.FALSE.) + CALL IO_File_close(TINIFILE) + IF (CSURF=="EXTE") CALL IO_File_close(TINIFILEPGD) ! !* 28.1 print statistics! ! ! Set File Timing OUTPUT ! - CALL SET_ILUOUT_TIMING(ILUOUT) + CALL SET_ILUOUT_TIMING(TLUOUT) ! ! Compute global time ! @@ -2185,6 +2185,7 @@ IF (OEXIT) THEN CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_B,ZTOT, ' REMAP FFTXZ-1=>B ' ,'-','F') ! JUAN P1/P2 CALL TIME_STAT_ll(XT_CLOUD,ZTOT, ' RESOLVED_CLOUD','=') + CALL TIME_STAT_ll(XT_ELEC,ZTOT, ' RESOLVED_ELEC','=') CALL TIME_STAT_ll(XT_HALO,ZTOT, ' EXCHANGE_HALO','=') CALL TIME_STAT_ll(XT_STEP_SWA,ZTOT, ' ENDSTEP','=') CALL TIME_STAT_ll(XT_STEP_BUD,ZTOT, ' BUDGETS','=') @@ -2197,8 +2198,8 @@ IF (OEXIT) THEN XT_ADV + XT_FORCING + XT_NUDGING + XT_SOURCES + XT_DIFF + & XT_ADVUVW + XT_GRAV + & XT_RELAX+ XT_PARAM + XT_COUPL + XT_RAD_BOUND+XT_PRESS + & - XT_CLOUD+ XT_HALO + XT_SPECTRA + XT_STEP_SWA +XT_STEP_MISC+ & - XT_STEP_BUD + XT_CLOUD+ XT_ELEC + XT_HALO + XT_SPECTRA + XT_STEP_SWA + & + XT_STEP_MISC+ XT_STEP_BUD CALL TIME_STAT_ll(ZALL,ZTOT, ' SUM(CALL)','=') CALL TIMING_SEPARATOR('=') ! @@ -2220,7 +2221,7 @@ IF (OEXIT) THEN ! ! Timing/ Steps ! - ZTIME_STEP = XT_START / FLOAT(KTCOUNT) + ZTIME_STEP = XT_START / REAL(KTCOUNT) WRITE(YTCOUNT,FMT="(I0)") KTCOUNT CALL TIME_STAT_ll(ZTIME_STEP,ZTOT, ' SECOND/STEP='//YTCOUNT,'=') ! @@ -2228,7 +2229,7 @@ IF (OEXIT) THEN ! IPOINTS = NIMAX_ll*NJMAX_ll*NKMAX WRITE(YPOINTS,FMT="(I0)") IPOINTS - ZTIME_STEP_PTS = ZTIME_STEP / FLOAT(IPOINTS) * 1e6 + ZTIME_STEP_PTS = ZTIME_STEP / REAL(IPOINTS) * 1e6 CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT) CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT, ' MICROSEC/STP/PT='//YPOINTS,'-') ! @@ -2236,8 +2237,10 @@ IF (OEXIT) THEN ! ! ! - CALL IO_FILE_CLOSE_ll(TLUOUT) - IF (IMI==NMODEL) CALL IO_FILE_CLOSE_ll(TLUOUT0) + CALL IO_File_close(TLUOUT) + IF (IMI==NMODEL) CALL IO_File_close(TLUOUT0) END IF -! + +!$acc end data + END SUBROUTINE MODEL_n diff --git a/pressurez.f90 b/pressurez.f90 index 61e68b29c..c9b2b9db9 100644 --- a/pressurez.f90 +++ b/pressurez.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2020 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. @@ -229,6 +229,8 @@ END MODULE MODI_PRESSUREZ !! J.escobar : check nb proc versus ZRESI & min(DIMX,DIMY) !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics +! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -242,13 +244,14 @@ USE MODD_DYN_n, ONLY: LRES, XRES USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_MPIF USE MODD_PARAMETERS +use modd_precision, only: MNHREAL_MPI USE MODD_REF, ONLY: LBOUSS -USE MODD_VAR_ll, ONLY: MPI_PRECISION, NMNH_COMM_WORLD , NPROC +USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD , NPROC ! -USE MODE_IO_ll, ONLY: CLOSE_ll USE MODE_ll USE MODE_MPPDB USE MODE_MSG +USE MODE_SUM2_ll, ONLY: GMAXLOC_ll ! USE MODI_BUDGET USE MODI_CONJGRAD @@ -264,7 +267,6 @@ USE MODI_MASS_LEAK USE MODI_P_ABS USE MODI_RICHARDSON USE MODI_SHUMAN -USE MODI_SUM_ll , ONLY : GMAXLOC_ll ! IMPLICIT NONE ! @@ -439,9 +441,9 @@ CALL MPPDB_CHECK3D(PRUS,"pressurez 4-before update_halo_ll::PRUS",PRECISION) CALL MPPDB_CHECK3D(PRVS,"pressurez 4-before update_halo_ll::PRVS",PRECISION) CALL MPPDB_CHECK3D(PRWS,"pressurez 4-before update_halo_ll::PRWS",PRECISION) NULLIFY(TZFIELDS_ll) -CALL ADD3DFIELD_ll(TZFIELDS_ll, PRUS) -CALL ADD3DFIELD_ll(TZFIELDS_ll, PRVS) -CALL ADD3DFIELD_ll(TZFIELDS_ll, PRWS) +CALL ADD3DFIELD_ll( TZFIELDS_ll, PRUS, 'PRESSUREZ::PRUS' ) +CALL ADD3DFIELD_ll( TZFIELDS_ll, PRVS, 'PRESSUREZ::PRVS' ) +CALL ADD3DFIELD_ll( TZFIELDS_ll, PRWS, 'PRESSUREZ::PRWS' ) CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDS_ll) CALL MPPDB_CHECK3D(PRUS,"pressurez 4-after update_halo_ll::PRUS",PRECISION) @@ -598,10 +600,10 @@ END IF CALL MPPDB_CHECK3DM("before MXM PRESSUREZ :PRU/V/WS",PRECISION,PRUS,PRVS,PRWS) IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN PRUS = PRUS - MXM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE - PRWS = PRWS - MZM(1,IKU,1,PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) + PRWS = PRWS - MZM(PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) ELSEIF(CEQNSYS=='LHE') THEN PRUS = PRUS - MXM(PRHODJ) * ZDV_SOURCE - PRWS = PRWS - MZM(1,IKU,1,PRHODJ) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) + PRWS = PRWS - MZM(PRHODJ) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) END IF ! IF(.NOT. L2D) THEN @@ -653,9 +655,9 @@ END IF PRVS(:,:,IKE+1)=PRVS(:,:,IKE) ! NULLIFY(TZFIELDS2_ll) -CALL ADD3DFIELD_ll(TZFIELDS2_ll, PRUS) -CALL ADD3DFIELD_ll(TZFIELDS2_ll, PRVS) -CALL ADD3DFIELD_ll(TZFIELDS2_ll, PRWS) +CALL ADD3DFIELD_ll( TZFIELDS2_ll, PRUS, 'PRESSUREZ::PRUS' ) +CALL ADD3DFIELD_ll( TZFIELDS2_ll, PRVS, 'PRESSUREZ::PRVS' ) +CALL ADD3DFIELD_ll( TZFIELDS2_ll, PRWS, 'PRESSUREZ::PRWS' ) CALL UPDATE_HALO_ll(TZFIELDS2_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDS2_ll) ! @@ -682,10 +684,8 @@ WRITE(ILUOUT,*) 'residual divergence / 2 DT', ZMAXVAL, & ' located at ', IMAXLOC FLUSH(unit=ILUOUT) IF (ABS(ZMAXVAL) .GT. 100.0 ) THEN - WRITE(ILUOUT,*) ' pressurez.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ABS(RESIDUAL) > 100.0 ' - FLUSH(unit=ILUOUT) - STOP ' pressurez.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ABS(RESIDUAL) > 100.0 ' -ENDIF + call Print_msg( NVERB_FATAL, 'GEN', 'PRESSUREZ', 'something wrong with pressure: abs(residual) > 100.0' ) +END IF ! number of iterations adjusted IF (LRES) THEN ZMAXRES = XRES @@ -718,7 +718,7 @@ IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW') ! ----------------------------- ! ZMAX = MAXVAL(ABS ( PRHODREF(:,:,IKB)-PRHODREF(:,:,IKE)) ) -CALL MPI_ALLREDUCE(ZMAX, ZMAX_ll, 1, MPI_PRECISION, MPI_MAX, & +CALL MPI_ALLREDUCE(ZMAX, ZMAX_ll, 1, MNHREAL_MPI, MPI_MAX, & NMNH_COMM_WORLD, KINFO) !IF ( ABS(PRHODREF(IIB,IJB,IKB)-PRHODREF(IIB,IJB,IKE)) > 1.E-12 & ! .AND. KTCOUNT >0 ) THEN @@ -756,7 +756,7 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN ! END IF ! - CALL ADD3DFIELD_ll(TZFIELDS_ll, PPABST) + CALL ADD3DFIELD_ll( TZFIELDS_ll, PPABST, 'PRESSUREZ::PPABST' ) CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDS_ll) ! diff --git a/read_exsegn.f90 b/read_exsegn.f90 index c122e5d24..85e867132 100644 --- a/read_exsegn.f90 +++ b/read_exsegn.f90 @@ -23,7 +23,7 @@ INTERFACE HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC, & HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD ) ! -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO, ONLY: TFILEDATA ! INTEGER, INTENT(IN) :: KMI ! Model index TYPE(TFILEDATA), INTENT(IN) :: TPEXSEGFILE ! EXSEG file @@ -289,6 +289,10 @@ END MODULE MODI_READ_EXSEG_n !! 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 !!------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -297,7 +301,7 @@ USE MODD_PARAMETERS USE MODD_CONF USE MODD_CONFZ USE MODD_CONF_n, ONLY: CSTORAGE_TYPE -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO, ONLY: TFILEDATA USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_VAR_ll, ONLY: NPROC ! @@ -350,7 +354,6 @@ USE MODD_GET_n USE MODD_GR_FIELD_n ! USE MODE_POS -USE MODE_IO_ll USE MODE_MSG ! USE MODI_TEST_NAM_VAR @@ -1029,7 +1032,7 @@ SELECT CASE ( CCLOUD ) 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 ")') - STOP + call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' ) END IF ! IF(LACTI .AND. NMOD_CCN == 0) THEN @@ -1037,7 +1040,7 @@ SELECT CASE ( CCLOUD ) 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.")') - STOP + call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' ) END IF ! IF(LNUCL .AND. NMOD_IFN == 0 .AND. (.NOT.LMEYERS)) THEN diff --git a/spectre.f90 b/spectre.f90 index ef3367cdc..545c60629 100644 --- a/spectre.f90 +++ b/spectre.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2011-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ######spl PROGRAM SPECTRE ! ############ @@ -24,7 +25,7 @@ ! ! USE MODD_CONF -USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA +USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA USE MODD_LUNIT USE MODD_LUNIT_n USE MODD_TIME_n @@ -36,10 +37,11 @@ USE MODI_SPECTRE_AROME ! USE MODE_MSG USE MODE_POS -USE MODE_IO_ll -USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST +USE MODE_IO, only: IO_Config_set, IO_Init +USE MODE_IO_FILE, only: IO_File_close, IO_File_open +USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print +use mode_init_ll, only: END_PARA_ll USE MODE_MODELN_HANDLER -USE MODE_FM !USE MODD_TYPE_DATE USE MODI_VERSION ! @@ -84,7 +86,7 @@ CALL GOTO_MODEL(1) CALL VERSION CPROGRAM='SPEC ' ! -CALL INITIO_ll() +CALL IO_Init() ! ! initialization YINIFILE(:) = ' ' @@ -120,8 +122,8 @@ PRINT*, '*********************************************************************' PRINT*, '*********************************************************************' PRINT*, ' ' ! -CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPEC1.nam','NML','READ') -CALL IO_FILE_OPEN_ll(TZNMLFILE) +CALL IO_File_add2list(TZNMLFILE,'SPEC1.nam','NML','READ') +CALL IO_File_open(TZNMLFILE) ILUNAM = TZNMLFILE%NLU ! PRINT*, 'READ THE SPEC1.NAM FILE' @@ -162,9 +164,9 @@ IF (GFOUND) THEN READ(UNIT=ILUNAM,NML=NAM_CONFIO) PRINT*, ' namelist NAM_CONFIO read' END IF -CALL SET_CONFIO_ll() +CALL IO_Config_set() ! -CALL IO_FILE_CLOSE_ll(TZNMLFILE) +CALL IO_File_close(TZNMLFILE) ! CINIFILE = YINIFILE(1) ! @@ -188,10 +190,10 @@ ENDIF IF (CTYPEFILE=='MESONH') THEN CALL SPECTRE_MESONH(YOUTFILE) ! - CALL IO_FILE_CLOSE_ll(LUNIT_MODEL(1)%TINIFILE) - IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST() - CALL IO_FILE_CLOSE_ll(TLUOUT0) - CALL IO_FILE_CLOSE_ll(TLUOUT) + CALL IO_File_close(LUNIT_MODEL(1)%TINIFILE) + IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print() + CALL IO_File_close(TLUOUT0) + CALL IO_File_close(TLUOUT) ELSEIF (CTYPEFILE=='AROME ')THEN CALL SPECTRE_AROME(CINIFILE,YOUTFILE,XDELTAX,XDELTAY,NI,NJ,NK) ELSE diff --git a/tridz.f90 b/tridz.f90 index 8b101dcf1..203c413f8 100644 --- a/tridz.f90 +++ b/tridz.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ################ @@ -10,7 +10,8 @@ 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, & PBF_SXP2_YP1_Z, & @@ -33,6 +34,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 @@ -76,7 +78,8 @@ 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, & @@ -190,7 +193,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_PARAMETERS ! USE MODE_ll -USE MODE_IO_ll USE MODE_MSG !JUAN P1/P2 SPLITTING USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll,GET_ORZ_ll,LWESTZ_ll,LSOUTHZ_ll @@ -223,6 +225,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 @@ -538,8 +541,10 @@ PCF_ZS(IIB:IIE,IJB:IJE,IKE+1) = 0.0 IKBE = IKU -call mg_main_mnh_init(IIMAX_ll,IKBE,PDXHATM*IIMAX_ll,ZDZM(IKB)*IKBE,& - A_K,B_K,C_K,D_K) +IF ( HPRESOPT == 'ZSOLV' ) THEN + call mg_main_mnh_init(IIMAX_ll,IKBE,PDXHATM*IIMAX_ll,ZDZM(IKB)*IKBE,& + A_K,B_K,C_K,D_K) +END IF !------------------------------------------------------------------------------ !* 7. COMPUTE THE DIAGONAL ELEMENTS B OF THE MATRIX -- GitLab