diff --git a/A-INSTALL b/A-INSTALL index e9fcf06f82d72f0ce656fbaac3f47b67f067bbe4..b51c893bc330a00d0906ccdf56e02bc4fd52829b 100644 --- a/A-INSTALL +++ b/A-INSTALL @@ -1,8 +1,8 @@ # # Version of PACKAGE MESONH "Open distribution" -# PACK-MNH-V5-4-2 -# DATE : 03/04/2019 -# VERSION : MESONH MASDEV5_4 + BUG-2 +# PACK-MNH-V5-4-3 +# DATE : 30/03/2020 +# VERSION : MESONH MASDEV5_4 + BUG-3 # # MAP # @@ -13,7 +13,7 @@ # III) COMPILING/INSTALLING THE MESONH PACKAGE ON YOUR LINUX COMPUTER # IV) RUN SOME "SMALL KTEST" EXAMPLES # V) RECOMPILING YOUR 'OWN' SOURCES ONLY -# VI) COMPILING/INSTALLING MESONH ON GENCI & ECMWF & METEO COMPUTERS +# VI) COMPILING/INSTALLING MESONH ON GENCI & ECMWF & METEO & CALMIP COMPUTERS # VII) "SCANDOLLAR" = SCRIPTING YOUR OWN PROCEDURES # # VIII) TROUBLE-SHOOTING @@ -80,14 +80,14 @@ # # or directly # -# http://mesonh.aero.obs-mip.fr/mesonh/dir_open/dir_MESONH/MNH-V5-4-2.tar.gz +# http://mesonh.aero.obs-mip.fr/mesonh/dir_open/dir_MESONH/MNH-V5-4-3.tar.gz # -# Then untar the file "MNH-V5-4-2.tar.gz" where you want to. +# Then untar the file "MNH-V5-4-3.tar.gz" where you want to. # For example, in your home directory: # cd ~ -tar xvfz MNH-V5-4-2.tar.gz +tar xvfz MNH-V5-4-3.tar.gz # # Process now to the chapter to configure the MesoNH package. @@ -167,10 +167,10 @@ git config --global http.sslverify false # Finally you can clone the Meso-NH Git repository with the following command: # -git lfs clone anongit@anongit_mesonh:/gitrepos/MNH-git_open_source-lfs.git -b MNH-54-branch MNH-V5-4-2 +git lfs clone anongit@anongit_mesonh:/gitrepos/MNH-git_open_source-lfs.git -b MNH-54-branch MNH-V5-4-3 # -# that will create the MNH-V5-4-2 directory containing a clone (copy) of the +# that will create the MNH-V5-4-3 directory containing a clone (copy) of the # Meso-NH package on the remote developpement branch MNH-54-branch # # @@ -180,34 +180,34 @@ git lfs clone anongit@anongit_mesonh:/gitrepos/MNH-git_open_source-lfs.git -b MN # Once the repository is cloned, it's better for you to checkout your own branch # (by default, you are on HEAD of the MNH-54-branch development branch ). # -# To create your local branch corresponding to the V5-4-2 version, type: +# To create your local branch corresponding to the V5-4-3 version, type: # -cd MNH-V5-4-2 -git checkout -b MYB-MNH-V5-4-2 PACK-MNH-V5-4-2 +cd MNH-V5-4-3 +git checkout -b MYB-MNH-V5-4-3 PACK-MNH-V5-4-3 # -# MYB-MNH-V5-4-2 is the name of the local branch you created +# MYB-MNH-V5-4-3 is the name of the local branch you created # and -# PACK-MNH-V5-4-2 is the remote/origin tag on which it is based. +# PACK-MNH-V5-4-3 is the remote/origin tag on which it is based. # # The advantage of this way of downloading the package is that in the future # you could check/update quickly differences with the new version of the # package without having to download entirely the full package. # -# Suppose that a new version, for example "PACK-MNH-V5-4-2", is announced. +# Suppose that a new version, for example "PACK-MNH-V5-4-4", is announced. # # To see the differences with your working copy, do: # git fetch -git diff HEAD PACK-MNH-V5-4-2 +git diff HEAD PACK-MNH-V5-4-4 # # To go to the new version, you can, for example, create a new local branch: # -git checkout -b MYB-MNH-V5-4-2 PACK-MNH-V5-4-2 +git checkout -b MYB-MNH-V5-4-4 PACK-MNH-V5-4-4 # # At any time, you can also check for "uptodate" changes in the Git branch @@ -253,7 +253,7 @@ git clone anongit@anongit_mesonh:/gitrepos/MNH-DOC.git # use the "./configure" script like this # -cd ~/MNH-V5-4-2/src +cd ~/MNH-V5-4-3/src ./configure . ../conf/profile_mesonh @@ -304,7 +304,7 @@ export OPTLEVEL=O2 # Compile in O2, 4 times faster then DEBUG, but less # and then source/load the new generate file -. ../conf/profile_mesonh.LXifort.MNH-V5-4-2.MPIAUTO.O2 +. ../conf/profile_mesonh.LXifort.MNH-V5-4-3.MPIAUTO.O2 # # REM: @@ -329,7 +329,7 @@ export OPTLEVEL=O2 # Compile in O2, 4 times faster then DEBUG, but less # go to the directory "src" # -cd ~/MNH-V5-4-2/src +cd ~/MNH-V5-4-3/src # # if you have not already configured your MESONH environment @@ -535,8 +535,8 @@ make examples ^L # -# VI) COMPILING/INSTALLING ON GENCI & ECMWF & METEO COMPUTERS -# =========================================================== +# VI) COMPILING/INSTALLING ON GENCI & ECMWF & METEO & CALMIP COMPUTERS +# ==================================================================== # # After downloading "exactly" like on "any standalone PC" # run the "./configure" command : @@ -547,51 +547,83 @@ make examples # # - If you do not have sufficient space in your "$HOME" directory, # install the whole package directly on the ${WORKDIR} +# /!\ the name of the WORKDIR differ in the differents computer center +# read the doc , most of them manage disk space throw 'multi-projet' with only one unique login . # # WARNING : # ======== # - Think to do a backup of your installation -# - This space is no more "purged" but a "crash disk" could/will +# - This space is no "purged" but a "crash disk" could/will # probably occur !!! # cd $WORKDIR -cd MNH-V5-4-2/src +cd MNH-V5-4-3/src ./configure # # Due to limitation in time & memory on interactive connection -# then compile the MESONH PACKAGE in batch mode with the different "job_make_mesonh*" files +# in some computer you have to compile the MESONH PACKAGE in batch mode with the different "job_make_mesonh*" files # # at IDRIS : # --------- # -# - On ADA ( IBM/x3750 ) with : +# - On JEAN-ZAY ( HPE ) the compilation is only possible in interactive : -llsubmit job_make_mesonh_IBM_ada +cd MNH-V5-4-3/src +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O2 +make -j16 |& tee error$XYZ +make installmaster -# -# -# - On TURING (IBM BG/Q ) : +# - to run the test case examples run -llsubmit job_make_mesonh_BGQ +sbatch -A {your_projet}@cpu job_make_examples_BullX_jeanzay # +# +# at CINES on OCCIGEN (BULLX) : +# ------------------------------------------------------- +# +# - install the PACKAGE in your $HOME ( default 50Go of quota ) +# - Compile in interactive mode ( see IDRIS ) # -# BACKUP : /!\ backup your work on "ergon" +# - to run the test case examples run + +sbatch job_make_examples_BullX_occigen + # # -# at CINES on JADE( SGI/ICE ) , OCCIGEN not tested yet : +# at TGCC on IRENE (BULLX) : # ------------------------------------------------------- -# -# - install the PACKAGE in your "/store/${USER}" directory -# - you could compile in interactive mode # -# BACKUP : /!\ backup your work on "/data/${USER}" +# At TGCC , you have two architectures accessible throw 2 differents frontals +# but with a commun disk space , connect to : +# +# - ssh irene-fr : for Intel SkyLake/KNL processors +# On Intel processors the MPI use is OPENMPI/2.0.4 +# the configure will generate a +# profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIAUTO-O2 +# +# - ssh irene-amd : for AMD , processors +# On AMD processors the MPI use is OPENMPI/4.02 +# the configure will generate a +# profile_mesonh-LXifort-R8I4-MNH-V5-4-3-AMD-MPIAUTO-O2 # +# - install the PACKAGE in your $CCCHOME ( default 20Go of quota ) +# - Compile in interactive mode ( see IDRIS ) +# + +# - to run the test case examples run +# +# On intel Skylake +ccc_msub job_make_examples_BullX_irene +# On intel Knl +ccc_msub -q knl job_make_examples_BullX_irene +# On intel AMD +ccc_msub job_make_examples_BullX_irene_AMD # # at ECMWF on cca ( CRAY/XC30 ) : @@ -600,45 +632,32 @@ llsubmit job_make_mesonh_BGQ # - to install MESONH go to your $PERM directory # if you need more disk space than allowed for 'standard' user # Ask to Dominique Lucas, look this email : -# -# http://mesonh.aero.obs-mip.fr/cgi-bin/mesonh_interne/mail2html.cgi?file=2009_09_24_15:31:54 +# http://mesonh.aero.obs-mip.fr/mesonh/dir_interne/dir_mail_mesonh_cnrm/dir_mail/2009_09_24_15:31:54.eml # # - for the compilation use : qsub job_make_mesonh_CRAY_cca -# -# REM : On CRAY computer cca , the default compiler is the CRAY one = crayftn . -# I you have trouble with this one , you could compile with the Intel/ifort one . -# Use the ifort one do : - -export ARCH=LXifort -./configure - -... - -creation du fichier --> ../conf/profile_mesonh-LXifortI4-MNH-V5-4-2-MPICRAY-O2 - -# And for the compilation & example job , switch the ARCH variable to LXifort : +# - to run the test case examples run -vi job_make_mesonh_CRAY_cca(job_make_examples_CRAY_cca) +qsub job_make_examples_CRAY_cca -ARCH=LXifort -#ARCH=LXcray # this is the default one -. ../conf/profile_mesonh-${ARCH}I4-MNH-V5-4-2-MPICRAY-O2 +# +# REM : On CRAY computer cca , I switch the default compiler to the INTEL one . +# Some trouble with the is the CRAY one = crayftn . # # - At Meteo-France DSI on beaufix (or prolix) # # to install the whole package on your "$HOME" directory -# untar the file "PACK-MNH-V5-4-2.tar.gz" from its location : +# untar the file "MNH-V5-4-3.tar.gz" from its location : cd ~ -tar xvf $MESONH/pack_MNH-V5-4-2.tar.gz +tar xvf $MESONH/MNH-V5-4-3.tar.gz # run the "./configure" command : -cd MNH-V5-4-2/src +cd MNH-V5-4-3/src ./configure # @@ -671,44 +690,18 @@ export VER_USER=MY_MODIF sbatch job_make_mesonh_user_BullX -# -# EXAMPLES ON GENCI & ECMWF PLATFORMS & METEO COMPUTERS -# ===================================================== -# -# - At IDRIS -# - -# on ADA - -llsubmit job_make_examples_IBM_ada - -#on TURING - -llsubmit job_make_examples_BGQ - -# -# - At CINES on JADE( SGI/ICE ) : -# -# load ".profile_mesonh..." & set the variables : - -export MONORUN="mpirun -np 1" -export MPIRUN="mpirun -np 4 " - -# and run with - -make examples # -# - At ECMWF on cca -# - -llsubmit job_make_examples_CRAY_cca - -# -# - At Meteo-France DSI on beaufix or prolix +# +# at CALMIP on OLYMPE (BULLX) : +# ------------------------------------------------------- +# +# - install the PACKAGE in your /tmpdir/$USER +# - Compile in interactive mode ( see IDRIS ) # +# - to run the test case examples run -sbatch job_make_examples_BullX +sbatch job_make_examples_BullX_olympe # # That's all for the basic INSTALLATION of the "MESONH PACKAGE" @@ -764,7 +757,7 @@ scandollar ## OUTPUT :: -># read default config file :: ---> CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-2/conf/post/confdollar_aeropc_default +># read default config file :: ---> CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-3/conf/post/confdollar_aeropc_default ># ># read user config file :: ---> CONFIG=confdollar ># @@ -786,7 +779,7 @@ scandollar 0* ## OUTPUT :: ># -># read default config file :: ---> CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-2/conf/post/confdollar_aeropc_default +># read default config file :: ---> CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-3/conf/post/confdollar_aeropc_default ># ># read user config file :: ---> CONFIG=confdollar ># @@ -860,22 +853,22 @@ cp -R 007_16janvier_scandollar /.../your_directory # # use this "profile_mesonh" : -. /home/rech/mnh/rmnh007/DEV/MNH-V5-4-2/conf/profile_mesonh-SX8-MNH-V5-4-2-MPIAUTO-O4 +. /home/rech/mnh/rmnh007/DEV/MNH-V5-4-3/conf/profile_mesonh-SX8-MNH-V5-4-3-MPIAUTO-O4 # And the examples are here ( link to my $WORKDIR in actually ) -/home/rech/mnh/rmnh007/DEV/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar +/home/rech/mnh/rmnh007/DEV/MNH-V5-4-3/MY_RUN/KTEST/007_16janvier_scandollar # # On vargas # --------- # use this "profile_mesonh" : -. /workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-2/conf/profile_mesonh-AIX64-MNH-V5-4-2-MPIAUTO-O2 +. /workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-3/conf/profile_mesonh-AIX64-MNH-V5-4-3-MPIAUTO-O2 # and examples here : -/workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar +/workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-3/MY_RUN/KTEST/007_16janvier_scandollar # # - At CINES on JADE : @@ -883,11 +876,11 @@ cp -R 007_16janvier_scandollar /.../your_directory # # use -. /work/escobar/DEV/MNH-V5-4-2/conf/profile_mesonh-LXifort-MNH-V5-4-2-MPIICE-O2 +. /work/escobar/DEV/MNH-V5-4-3/conf/profile_mesonh-LXifort-MNH-V5-4-3-MPIICE-O2 # and the exemples -/work/escobar/DEV/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar +/work/escobar/DEV/MNH-V5-4-3/MY_RUN/KTEST/007_16janvier_scandollar # # - At ECMWF on cxa : @@ -895,11 +888,11 @@ cp -R 007_16janvier_scandollar /.../your_directory # # use -. /c1a/ms_perm/au5/MNH-V5-4-2/conf/profile_mesonh-AIX64-MNH-V5-4-2-MPIAUTO-O2 +. /c1a/ms_perm/au5/MNH-V5-4-3/conf/profile_mesonh-AIX64-MNH-V5-4-3-MPIAUTO-O2 # and the examples -/c1a/ms_perm/au5/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar +/c1a/ms_perm/au5/MNH-V5-4-3/MY_RUN/KTEST/007_16janvier_scandollar # diff --git a/src/LIB/SURCOUCHE/src/modd_argslist_ll.f90 b/src/LIB/SURCOUCHE/src/modd_argslist_ll.f90 index f21707ecc22db75778043e6484f0f0b23911fd5b..5eafaed2757a253dc6171b6c287df64b80f1ee17 100644 --- a/src/LIB/SURCOUCHE/src/modd_argslist_ll.f90 +++ b/src/LIB/SURCOUCHE/src/modd_argslist_ll.f90 @@ -3,6 +3,7 @@ !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_ARGSLIST_ll ! ####################### @@ -37,15 +38,15 @@ ! !------------------------------------------------------------------------------- ! - USE MODD_STRUCTURE2_ll, ONLY : HALO2_ll +USE MODD_STRUCTURE2_ll, ONLY: HALO2_ll implicit none integer,parameter :: NLISTTYPENAMESIZE = 32 -! ############ - TYPE LIST_ll -! ############ +!########### +TYPE LIST_ll +!########### ! !!**** *Type LIST_ll* - ! @@ -57,7 +58,7 @@ integer,parameter :: NLISTTYPENAMESIZE = 32 ! !------------------------------------------------------------------------------- ! - INTEGER :: NCARD = -1 + INTEGER :: NCARD = 0 LOGICAL :: L1D = .false. LOGICAL :: L2D = .false. LOGICAL :: L3D = .false. @@ -68,15 +69,15 @@ integer,parameter :: NLISTTYPENAMESIZE = 32 REAL, DIMENSION(:,:), POINTER :: ARRAY2D => null() REAL, DIMENSION(:,:,:), POINTER :: ARRAY3D => null() ! - TYPE(LIST_ll), POINTER :: NEXT => null() + TYPE(LIST_ll), POINTER :: NEXT => null() ! - END TYPE LIST_ll +END TYPE LIST_ll ! !------------------------------------------------------------------------------- ! -! ############## - TYPE LIST1D_ll -! ############## +!############# +TYPE LIST1D_ll +!############# ! !!**** *Type LIST1D_ll* - ! @@ -87,22 +88,22 @@ integer,parameter :: NLISTTYPENAMESIZE = 32 ! !------------------------------------------------------------------------------- ! - INTEGER :: NCARD = -1 + INTEGER :: NCARD = 0 character(len=NLISTTYPENAMESIZE) :: cname = 'UNKNOWN' REAL, DIMENSION(:), POINTER :: ARRAY1D => null() CHARACTER(LEN=1) :: CDIR = ' ' ! - TYPE(LIST1D_ll), POINTER :: NEXT => null() + TYPE(LIST1D_ll), POINTER :: NEXT => null() ! - END TYPE LIST1D_ll +END TYPE LIST1D_ll ! !------------------------------------------------------------------------------- ! -! ################# - TYPE HALO2LIST_ll -! ################# +!################ +TYPE HALO2LIST_ll +!################ ! !!**** *Type HALO2LIST_ll* - ! @@ -113,13 +114,13 @@ integer,parameter :: NLISTTYPENAMESIZE = 32 ! !------------------------------------------------------------------------------- ! - INTEGER :: NCARD = -1 + INTEGER :: NCARD = 0 ! - TYPE(HALO2_ll), POINTER :: HALO2 => null() + TYPE(HALO2_ll), POINTER :: HALO2 => null() ! TYPE(HALO2LIST_ll), POINTER :: NEXT => null() ! - END TYPE HALO2LIST_ll +END TYPE HALO2LIST_ll ! !------------------------------------------------------------------------------- ! diff --git a/src/LIB/SURCOUCHE/src/modd_structure2_ll.f90 b/src/LIB/SURCOUCHE/src/modd_structure2_ll.f90 index 5a823e55df4954f4a670256b39e8be6d48cfb296..3b04ba768724c80140e10aa1af7a7d4071651e1d 100644 --- a/src/LIB/SURCOUCHE/src/modd_structure2_ll.f90 +++ b/src/LIB/SURCOUCHE/src/modd_structure2_ll.f90 @@ -1,20 +1,11 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1998-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. !----------------------------------------------------------------- -!--------------- special set of characters for CVS information -!----------------------------------------------------------------- -! $Source$ -! $Name$ -! $Revision$ -! $Date$ -!----------------------------------------------------------------- -!----------------------------------------------------------------- - -! ######################## - MODULE MODD_STRUCTURE2_ll -! ######################## +!######################## +MODULE MODD_STRUCTURE2_ll +!######################## ! !!**** *MODD_PARALLEL2* Contains the variables to treat ! the second layer of the halo @@ -46,18 +37,20 @@ ! !------------------------------------------------------------------------------- ! -! ############# - TYPE HALO2_ll -! ############# +implicit none +! +!############ +TYPE HALO2_ll +!############ ! ! Type for the second layer of the halo ! - REAL, DIMENSION(:,:), POINTER :: WEST - REAL, DIMENSION(:,:), POINTER :: EAST - REAL, DIMENSION(:,:), POINTER :: NORTH - REAL, DIMENSION(:,:), POINTER :: SOUTH + REAL, DIMENSION(:,:), POINTER :: WEST => NULL() + REAL, DIMENSION(:,:), POINTER :: EAST => NULL() + REAL, DIMENSION(:,:), POINTER :: NORTH => NULL() + REAL, DIMENSION(:,:), POINTER :: SOUTH => NULL() ! - END TYPE HALO2_ll +END TYPE HALO2_ll ! !------------------------------------------------------------------------------- ! diff --git a/src/LIB/SURCOUCHE/src/modd_structure_ll.f90 b/src/LIB/SURCOUCHE/src/modd_structure_ll.f90 index 570dcba7e58e2f18d20d042d9a67b977355d11f6..f2ce9fe5c21b8c436db2714c36eec256cf8beb8e 100644 --- a/src/LIB/SURCOUCHE/src/modd_structure_ll.f90 +++ b/src/LIB/SURCOUCHE/src/modd_structure_ll.f90 @@ -1,11 +1,11 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1998-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. !----------------------------------------------------------------- -! ######################## - MODULE MODD_STRUCTURE_ll -! ######################## +!####################### +MODULE MODD_STRUCTURE_ll +!####################### ! !!**** *MODD_STRUCTURE_lll* - declaration of parallel structure ! @@ -45,10 +45,12 @@ ! !------------------------------------------------------------------------------- ! - USE MODD_ARGSLIST_ll, ONLY : LIST_ll - USE MODD_PARAMETERS, ONLY : NNEGUNDEF - USE MODD_PARAMETERS_ll, ONLY : NMAXRIM -! +USE MODD_ARGSLIST_ll, ONLY : LIST_ll +USE MODD_PARAMETERS, ONLY : NNEGUNDEF +USE MODD_PARAMETERS_ll, ONLY : NMAXRIM + +implicit none + !------------------------------------------------------------------------------- ! ! Routines for allocation of structured types diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index b42f0e8b2c7d4ea0531a45fe63350bd66b10e2fb..b29d67538409329d43280254a33d280f491db0ee 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -133,12 +133,13 @@ END MODULE MODI_ADVECTION_METSV !! 04/2016 (C.Lac) : correction of negativity for KHKO !! 10/2016 (C.Lac) Correction on the flag for Strang splitting !! to insure reproducibility between START and RESTA -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! 07/2017 (V. Vionnet) : add advection of 2D variables at -!! the surface for the blowing snow scheme -!! 03/2020 (B.Vie) : LIMA negativity checks after turbulence, advection and -!! microphysics budgets +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! V. Vionnet 07/2017: add advection of 2D variables at the surface for the blowing snow scheme +! B. Vie 03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices +! P. Wautelet + Benoît Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets +! P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -162,6 +163,7 @@ USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODE_ll USE MODE_MSG +use mode_sources_neg_correct, only: Sources_neg_correct ! USE MODI_ADV_BOUNDARIES USE MODI_BUDGET @@ -672,137 +674,9 @@ IF (KRR>=7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH') DO JSV=1,KSV IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV') END DO -! -SELECT CASE ( HCLOUD ) - CASE('ICE3','ICE4') - ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) - ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:) - ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) - ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) - ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) - WHERE (PRRS(:,:,:,4) < 0.) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,4) = 0. - END WHERE -! -! cloud - WHERE (PRRS(:,:,:,2) < 0.) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,2) = 0. - END WHERE -! -! if rc or ri are positive, we can correct negative rv -! cloud - WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) ) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,2) = 0. - END WHERE -! ice - IF(KRR > 3) THEN - WHERE ((PRRS(:,:,:,1) < 0.).AND.(PRRS(:,:,:,4) > 0.)) - ZCOR(:,:,:)=MIN(-PRRS(:,:,:,1),PRRS(:,:,:,4)) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + ZCOR(:,:,:) - PRTHS(:,:,:) = PRTHS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,4) = PRRS(:,:,:,4) -ZCOR(:,:,:) - END WHERE - END IF -! - CASE('C2R2','KHKO') - ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) - ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:) - ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) - ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) - ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) -! CALL GET_HALO(PRRS(:,:,:,2)) -! CALL GET_HALO(PRSVS(:,:,:,2)) -! CALL GET_HALO(PRSVS(:,:,:,3)) - WHERE (PRRS(:,:,:,2) < 0. .OR. PRSVS(:,:,:,2) < 0.) - PRSVS(:,:,:,1) = 0.0 - END WHERE - DO JSV = 2, 3 - WHERE (PRRS(:,:,:,JSV) < 0. .OR. PRSVS(:,:,:,JSV) < 0.) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JSV) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,JSV) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,JSV) = 0.0 - PRSVS(:,:,:,JSV) = 0.0 - END WHERE - END DO - ! - CASE('LIMA') - ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) - ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:) - ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) - ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) - ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) -! Correction where rc<0 or Nc<0 - IF (LWARM) THEN - WHERE (PRRS(:,:,:,2) < XRTMIN(2)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NC) < XCTMIN(2)/PTSTEP) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,2) = 0.0 - PRSVS(:,:,:,NSV_LIMA_NC) = 0.0 - END WHERE - END IF -! Correction where rr<0 or Nr<0 - IF (LWARM .AND. LRAIN) THEN - WHERE (PRRS(:,:,:,3) < XRTMIN(3)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NR) < XCTMIN(3)/PTSTEP) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,3) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,3) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,3) = 0.0 - PRSVS(:,:,:,NSV_LIMA_NR) = 0.0 - END WHERE - END IF -! Correction where ri<0 or Ni<0 - IF (LCOLD) THEN - WHERE (PRRS(:,:,:,4) < XRTMIN(4)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NI) < XCTMIN(4)/PTSTEP) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4) - PRTHS(:,:,:) = PRTHS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRRS(:,:,:,4) = 0.0 - PRSVS(:,:,:,NSV_LIMA_NI) = 0.0 - END WHERE - END IF -! - PRSVS(:,:,:,:) = MAX( 0.0,PRSVS(:,:,:,:) ) - PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) ) -! -END SELECT -! -IF ((HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') .OR. (HCLOUD == 'LIMA') ) THEN - IF (LBUDGET_TH) CALL BUDGET (PRTHS(:,:,:) , 4,'NEADV_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NEADV_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NEADV_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), 8,'NEADV_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), 9,'NEADV_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'NEADV_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'NEADV_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'NEADV_BU_RRH') -END IF -IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN - IF (LWARM) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NC),12+NSV_LIMA_NC,'NEADV_BU_RSV') - IF (LWARM.AND.LRAIN) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NR),12+NSV_LIMA_NR,'NEADV_BU_RSV') - IF (LCOLD) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NI),12+NSV_LIMA_NI,'NEADV_BU_RSV') - IF (NMOD_CCN.GE.1) THEN - DO JI=1, NMOD_CCN - CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JI-1),12+NSV_LIMA_CCN_FREE+JI-1,'NEADV_BU_RSV') - END DO - END IF - IF (NMOD_IFN.GE.1) THEN - DO JI=1, NMOD_IFN - CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JI-1),12+NSV_LIMA_IFN_FREE+JI-1,'NEADV_BU_RSV') - END DO - END IF -END IF + +! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets +call Sources_neg_correct( hcloud, 'NEADV', krr, ptstep, ppabst, ptht, prt, prths, prrs, prsvs ) !------------------------------------------------------------------------------- ! diff --git a/src/MNH/boundaries.f90 b/src/MNH/boundaries.f90 index a0095f8c355ebaf408bcee8d5bd4396754a85a59..3ab2cf047ca338a8a6a0c4360328154d2f6da13f 100644 --- a/src/MNH/boundaries.f90 +++ b/src/MNH/boundaries.f90 @@ -1,12 +1,8 @@ -!MNH_LIC Copyright 1994-2014 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. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/boundaries.f90,v $ $Revision: 1.3.2.1.2.1.2.2.12.3 $ $Date: 2014/01/09 15:01:54 $ -!----------------------------------------------------------------- !##################### MODULE MODI_BOUNDARIES !##################### @@ -176,46 +172,43 @@ END MODULE MODI_BOUNDARIES !! Modification 18/07/17 (Vionnet) Add blowing snow variables !! Modification 01/2018 (JL Redelsperger) Correction for TKE treatment !! Modification 03/02/2020 (B. Vié) Correction for SV with LIMA +! P. Wautelet 04/06/2020: correct call to Set_conc_lima !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! -USE MODD_PARAMETERS -USE MODD_CTURB -USE MODD_CONF -USE MODD_NSV -USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHIC -USE MODD_CH_AEROSOL , ONLY : LORILAM -USE MODD_DUST -USE MODD_SALT, ONLY : LSALT -USE MODD_PASPOL, ONLY : LPASPOL -USE MODD_CONDSAMP, ONLY : LCONDSAMP -USE MODD_ELEC_DESCR -USE MODD_ELEC_n USE MODD_BLOWSNOW, ONLY : LBLOWSNOW,NBLOWSNOW_2D USE MODD_BLOWSNOW_n -USE MODD_REF_n -USE MODD_PARAM_n, ONLY : CELEC,CCLOUD -USE MODD_LBC_n, ONLY : XPOND +USE MODD_CH_AEROSOL , ONLY : LORILAM +USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHIC +USE MODD_CONDSAMP, ONLY : LCONDSAMP +USE MODD_CONF +USE MODD_CTURB +USE MODD_DUST USE MODD_GRID_n, ONLY : XZZ -! -USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND, LWARM, LCOLD -! +USE MODD_ELEC_DESCR +USE MODD_ELEC_n #ifdef MNH_FOREFIRE USE MODD_FOREFIRE, ONLY : LFOREFIRE #endif +USE MODD_LBC_n, ONLY : XPOND +USE MODE_ll USE MODD_NESTING, ONLY : NDAD -! +USE MODD_NSV +USE MODD_PARAMETERS +USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND, LWARM, LCOLD +USE MODD_PARAM_n, ONLY : CELEC,CCLOUD +USE MODD_PASPOL, ONLY : LPASPOL +USE MODD_REF_n +USE MODD_SALT, ONLY : LSALT + USE MODE_MODELN_HANDLER -! -USE MODI_ION_BOUNDARIES +USE MODE_SET_CONC_LIMA + USE MODI_CH_BOUNDARIES -! -USE MODE_ll -! USE MODI_INIT_AEROSOL_CONCENTRATION -USE MODI_SET_CONC_LIMA -! +USE MODI_ION_BOUNDARIES + IMPLICIT NONE ! ! @@ -1013,7 +1006,7 @@ IF (CCLOUD == 'LIMA' .AND. IMI == 1 .AND. CPROGRAM=='MESONH') THEN ENDIF END DO - CALL SET_CONC_LIMA('NONE',PRHODREF,ZRT,ZSVT) + CALL SET_CONC_LIMA( IMI, 'NONE', PRHODREF, ZRT(:, :, :, :), ZSVT(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) ) IF (NSV_LIMA_NC.GE.1) THEN IF (GLIMABOUNDARY(NSV_LIMA_NC)) THEN PSVT(IIB-1,:,:,NSV_LIMA_NC)=ZSVT(IIB-1,:,:,NSV_LIMA_NC) ! cloud diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index 934b3447a3e135da7947c7fb823d1907f91b83fa..a554e967f003a65d25b075efa39da3ead31f85cc 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -1,8 +1,7 @@ -!MNH_LIC Copyright 1994-2014 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. -! _Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/default_desfmn.f90,v _ !----------------------------------------------------------------- ! ########################### MODULE MODI_DEFAULT_DESFM_n @@ -230,7 +229,8 @@ END MODULE MODI_DEFAULT_DESFM_n !! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes !! 05/2019 F.Brient add tracer emission from the top of the boundary-layer !! 11/2019 C.Lac correction in the drag formula and application to building in addition to tree -!! +! P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables +! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -881,7 +881,10 @@ IF (KMI == 1) THEN NHTURBSV = 0 NCHEMSV = 0 NNEGASV = 0 - NDEPOTRSV = 0 + NNETURSV = 0 + NNEADVSV = 0 + NNECONSV = 0 + NDEPOTRSV = 0 ! ! END IF diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90 index 3c49a64ba711e8d9e64d3cab636709a365826c06..907a8d1d668634f6c53da83a38c8638f7ad7fd26 100644 --- a/src/MNH/ini_budget.f90 +++ b/src/MNH/ini_budget.f90 @@ -11,7 +11,8 @@ INTERFACE ONUMDIFU,ONUMDIFTH,ONUMDIFSV, & OHORELAX_UVWTH,OHORELAX_RV,OHORELAX_RC,OHORELAX_RR, & OHORELAX_RI,OHORELAX_RS, OHORELAX_RG, OHORELAX_RH,OHORELAX_TKE, & - OHORELAX_SV,OVE_RELAX,OCHTRANS,ONUDGING,ODRAGTREE,ODEPOTREE, & + OHORELAX_SV, OVE_RELAX, ove_relax_grd, OCHTRANS, & + ONUDGING,ODRAGTREE,ODEPOTREE, & HRAD,HDCONV,HSCONV,HTURB,HTURBDIM,HCLOUD ) ! INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints @@ -44,7 +45,9 @@ LOGICAL,DIMENSION(:),INTENT(IN):: OHORELAX_SV ! switch for the ! horizontal relaxation for scalar variables LOGICAL, INTENT(IN) :: OVE_RELAX ! switch to activate the vertical ! relaxation -LOGICAL, INTENT(IN) :: OCHTRANS ! switch to activate convective +logical, intent(in) :: ove_relax_grd ! switch to activate the vertical + ! relaxation to the lowest verticals +LOGICAL, INTENT(IN) :: OCHTRANS ! switch to activate convective !transport for SV LOGICAL, INTENT(IN) :: ONUDGING ! switch to activate nudging LOGICAL, INTENT(IN) :: ODRAGTREE ! switch to activate vegetation drag @@ -70,7 +73,8 @@ END MODULE MODI_INI_BUDGET ONUMDIFU,ONUMDIFTH,ONUMDIFSV, & OHORELAX_UVWTH,OHORELAX_RV,OHORELAX_RC,OHORELAX_RR, & OHORELAX_RI,OHORELAX_RS, OHORELAX_RG, OHORELAX_RH,OHORELAX_TKE, & - OHORELAX_SV,OVE_RELAX,OCHTRANS,ONUDGING,ODRAGTREE,ODEPOTREE, & + OHORELAX_SV, OVE_RELAX, ove_relax_grd, OCHTRANS, & + ONUDGING,ODRAGTREE,ODEPOTREE, & HRAD,HDCONV,HSCONV,HTURB,HTURBDIM,HCLOUD ) ! ################################################################# ! @@ -148,16 +152,20 @@ END MODULE MODI_INI_BUDGET !! C.Lac 29/01/15 Correction for NSV_USER !! J.Escobar 02/10/2015 modif for JPHEXT(JPVEXT) variable !! C.Lac 04/12/15 Correction for LSUPSAT -!! 04/2016 (C.LAC) negative contribution to the budget splitted between advection, turbulence and microphysics for KHKO/C2R2 -!! C. Barthe 01/2016 Add budget for LIMA -!! C.Lac 10/2016 Add budget for droplet deposition -!! S. Riette 11/2016 New budgets for ICE3/ICE4 +! C. Lac 04/2016: negative contribution to the budget split between advection, turbulence and microphysics for KHKO/C2R2 +! C. Barthe 01/2016: add budget for LIMA +! C. Lac 10/2016: add budget for droplet deposition +! S. Riette 11/2016: new budgets for ICE3/ICE4 ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 24/02/2020: bugfix: corrected condition for budget NCDEPITH ! P. Wautelet 26/02/2020: bugfix: rename CEVA->REVA for budget for raindrop evaporation in C2R2 (necessary after commit 4ed805fc) ! P. Wautelet 26/02/2020: bugfix: add missing condition on OCOLD for NSEDIRH budget in LIMA case ! B. Vie 02/03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets +! P. Wautelet 25/03/2020: add missing ove_relax_grd +! P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets +! P. Wautelet 30/06/2020: use NADVSV when possible +! P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -177,6 +185,7 @@ USE MODD_PARAM_LIMA, ONLY : OWARM=>LWARM, OCOLD=>LCOLD, OSEDI=>LSEDI, & OHAIL=>LHAIL, OSCAV=>LSCAV, OMEYERS=>LMEYERS,& ODEPOC=>LDEPOC, OPTSPLIT=>LPTSPLIT, & NMOD_CCN +USE MODD_PARAM_n, only: CELEC ! USE MODE_ll USE MODE_MSG @@ -216,7 +225,9 @@ LOGICAL,DIMENSION(:),INTENT(IN):: OHORELAX_SV ! switch for the ! horizontal relaxation for scalar variables LOGICAL, INTENT(IN) :: OVE_RELAX ! switch to activate the vertical ! relaxation -LOGICAL, INTENT(IN) :: OCHTRANS ! switch to activate convective +logical, intent(in) :: ove_relax_grd ! switch to activate the vertical + ! relaxation to the lowest verticals +LOGICAL, INTENT(IN) :: OCHTRANS ! switch to activate convective !transport for SV LOGICAL, INTENT(IN) :: ONUDGING ! switch to activate nudging LOGICAL, INTENT(IN) :: ODRAGTREE ! switch to activate vegetation drag @@ -445,10 +456,10 @@ IF (LBU_RU) THEN IPROC=IPROC+1 IF ( ONUMDIFU ) IPROACTV(1,IPROC) = NDIFU IPROC=IPROC+1 - IF ( OHORELAX_UVWTH .OR. OVE_RELAX ) THEN + IF ( OHORELAX_UVWTH .OR. OVE_RELAX .or. ove_relax_grd) THEN IPROACTV(1,IPROC) = NRELU ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(1,IPROC) = 4 @@ -548,10 +559,10 @@ IF (LBU_RV) THEN IPROC=IPROC+1 IF ( ONUMDIFU ) IPROACTV(2,IPROC) = NDIFV IPROC=IPROC+1 - IF ( OHORELAX_UVWTH .OR. OVE_RELAX ) THEN + IF ( OHORELAX_UVWTH .OR. OVE_RELAX .or. ove_relax_grd ) THEN IPROACTV(2,IPROC) = NRELV ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(2,IPROC) = 4 @@ -651,10 +662,10 @@ IF (LBU_RW) THEN IPROC=IPROC+1 IF ( ONUMDIFU ) IPROACTV(3,IPROC) = NDIFW IPROC=IPROC+1 - IF ( OHORELAX_UVWTH .OR. OVE_RELAX ) THEN + IF ( OHORELAX_UVWTH .OR. OVE_RELAX .or. ove_relax_grd ) THEN IPROACTV(3,IPROC) = NRELW ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(3,IPROC) = 4 @@ -748,10 +759,10 @@ IF (LBU_RTH) THEN IPROC=IPROC+1 IF ( ONUMDIFTH ) IPROACTV(4,IPROC) = NDIFTH IPROC=IPROC+1 - IF ( OHORELAX_UVWTH .OR. OVE_RELAX ) THEN + IF ( OHORELAX_UVWTH .OR. OVE_RELAX .or. ove_relax_grd ) THEN IPROACTV(4,IPROC) = NRELTH ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(4,IPROC) = 4 @@ -778,19 +789,19 @@ IF (LBU_RTH) THEN IPROC=IPROC+1 IF (HTURB /= 'NONE') IPROACTV(4,IPROC) = NDISSHTH IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & - IPROACTV(4,IPROC) = NNETURTH + IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) & + IPROACTV(4,IPROC) = NNETURTH IPROC=IPROC+1 IF ( HSCONV == 'EDKF' ) IPROACTV(4,IPROC) = NMAFLTH IPROC=IPROC+1 IPROACTV(4,IPROC) = NADVTH IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(4,IPROC) = NNEADVTH + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(4,IPROC) = NNEADVTH IPROC=IPROC+1 - IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') & - IPROACTV(4,IPROC) = NNEGATH + IF (HCLOUD /= 'NONE') IPROACTV(4,IPROC) = NNEGATH IPROC=IPROC+1 IF (HCLOUD == 'LIMA') THEN IF (OPTSPLIT) IPROACTV(4,IPROC) = NSEDITH @@ -891,9 +902,7 @@ IF (LBU_RTH) THEN HCLOUD == 'REVE') IPROACTV(4,IPROC) = NCONDTH IPROC=IPROC+1 END IF - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2').OR. (HCLOUD == 'KESS')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))& - IPROACTV(4,IPROC) = NNECONTH + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(4,IPROC) = NNECONTH ! YWORK2(4,1) = 'INIF_' YWORK2(4,2) = 'ENDF_' @@ -1060,7 +1069,7 @@ IF (LBU_RTKE) THEN IF ( OHORELAX_TKE ) THEN IPROACTV(5,IPROC) = NRELTKE ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(5,IPROC) = 4 @@ -1139,7 +1148,7 @@ IF (LBU_RRV) THEN IF ( OHORELAX_RV .OR. OVE_RELAX ) THEN IPROACTV(6,IPROC) = NRELRV ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD.OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(6,IPROC) = 4 @@ -1162,19 +1171,19 @@ IF (LBU_RRV) THEN END IF END IF IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))) & + IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) & IPROACTV(6,IPROC) = NNETURRV IPROC=IPROC+1 IF ( HSCONV == 'EDKF' ) IPROACTV(6,IPROC) = NMAFLRV IPROC=IPROC+1 IPROACTV(6,IPROC) = NADVRV IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(6,IPROC) = NNEADVRV + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(6,IPROC) = NNEADVRV IPROC=IPROC+1 - IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') & - IPROACTV(6,IPROC) = NNEGARV + IF (HCLOUD /= 'NONE') IPROACTV(6,IPROC) = NNEGARV IPROC=IPROC+1 IF (HCLOUD == 'LIMA') THEN @@ -1224,9 +1233,7 @@ IF (LBU_RRV) THEN IPROACTV(6,IPROC) = NCDEPIRV IPROC=IPROC+1 END IF - IF ( (HCLOUD == 'KHKO' ) .OR. (HCLOUD == 'C2R2') .OR. (HCLOUD == 'KESS')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) & - IPROACTV(6,IPROC) = NNECONRV + IF ( HCLOUD /= 'NONE' .AND. CELEC == 'NONE' ) IPROACTV(6,IPROC) = NNECONRV IPROC=IPROC+1 ! @@ -1334,7 +1341,7 @@ IF (LBU_RRC) THEN IF ( OHORELAX_RC ) THEN IPROACTV(7,IPROC) = NRELRC ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(7,IPROC) = 4 @@ -1359,18 +1366,17 @@ IF (LBU_RRC) THEN END IF END IF IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))) & - IPROACTV(7,IPROC) = NNETURRC + IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) & + IPROACTV(7,IPROC) = NNETURRC IPROC=IPROC+1 IPROACTV(7,IPROC) = NADVRC IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) & - IPROACTV(7,IPROC) = NNEADVRC + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(7,IPROC) = NNEADVRC IPROC=IPROC+1 - IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'KHKO' .AND. HCLOUD /= 'C2R2') & - IPROACTV(7,IPROC) = NNEGARC + IF (HCLOUD /= 'NONE') IPROACTV(7,IPROC) = NNEGARC IPROC=IPROC+1 IF (HCLOUD == 'LIMA') THEN @@ -1474,9 +1480,7 @@ IF (LBU_RRC) THEN HCLOUD(1:3) == 'KES'.OR. HCLOUD == 'REVE') IPROACTV(7,IPROC) = NCONDRC IPROC=IPROC+1 END IF - IF ( (HCLOUD == 'KHKO' ) .OR. (HCLOUD == 'C2R2') .OR. (HCLOUD == 'KESS')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) & - IPROACTV(7,IPROC) = NNECONRC + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(7,IPROC) = NNECONRC IPROC=IPROC+1 ! @@ -1627,7 +1631,7 @@ IF (LBU_RRR) THEN IF ( OHORELAX_RR ) THEN IPROACTV(8,IPROC) = NRELRR ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD.OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(8,IPROC) = 4 @@ -1636,13 +1640,14 @@ IF (LBU_RRR) THEN END IF END IF IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(8,IPROC) = NNETURRR + IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' .OR. HCLOUD == 'LIMA' ) ) & + IPROACTV(8,IPROC) = NNETURRR IPROC=IPROC+1 IPROACTV(8,IPROC) = NADVRR IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(8,IPROC) = NNEADVRR + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(8,IPROC) = NNEADVRR IPROC=IPROC+1 IF ( HCLOUD /= 'NONE' ) IPROACTV(8,IPROC) = NNEGARR IPROC=IPROC+1 @@ -1734,9 +1739,7 @@ IF (LBU_RRR) THEN IPROACTV(8,IPROC) = NSEDIRR IPROC=IPROC+1 END IF - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))& - IPROACTV(8,IPROC) = NNECONRR + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(8,IPROC) = NNECONRR ! YWORK2(8,1) = 'INIF_' YWORK2(8,2) = 'ENDF_' @@ -1869,7 +1872,7 @@ IF (LBU_RRI) THEN IF ( OHORELAX_RI ) THEN IPROACTV(9,IPROC) = NRELRI ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(9,IPROC) = 4 @@ -1892,14 +1895,14 @@ IF (LBU_RRI) THEN END IF END IF IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & - IPROACTV(9,IPROC) = NNETURRI + IF ( HTURB /= 'NONE' .AND. ( HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) ) & + IPROACTV(9,IPROC) = NNETURRI IPROC=IPROC+1 IPROACTV(9,IPROC) = NADVRI IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(9,IPROC) = NNEADVRI + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(9,IPROC) = NNEADVRI IPROC=IPROC+1 IF( HCLOUD /= 'NONE' ) IPROACTV(9,IPROC) = NNEGARI IPROC=IPROC+1 @@ -1979,9 +1982,7 @@ IF (LBU_RRI) THEN IPROACTV(9,IPROC) = NCDEPIRI IPROC=IPROC+1 END IF - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))& - IPROACTV(9,IPROC) = NNECONRI + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(9,IPROC) = NNECONRI ! YWORK2(9,1) = 'INIF_' YWORK2(9,2) = 'ENDF_' @@ -2111,7 +2112,7 @@ IF (LBU_RRS) THEN IF ( OHORELAX_RS ) THEN IPROACTV(10,IPROC) = NRELRS ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(10,IPROC) = 4 @@ -2119,15 +2120,16 @@ IF (LBU_RRS) THEN IPROACTV(10,IPROC) = 3 END IF END IF - IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & - IPROACTV(10,IPROC) = NNETURRS +! IPROC=IPROC+1 +! IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & +! .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & +! IPROACTV(10,IPROC) = NNETURRS IPROC= IPROC+1 IPROACTV(10,IPROC) = NADVRS IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(10,IPROC) = NNEADVRS + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(10,IPROC) = NNEADVRS IPROC= IPROC+1 IF( HCLOUD /= 'NONE' ) IPROACTV(10,IPROC) = NNEGARS IPROC=IPROC+1 @@ -2190,9 +2192,7 @@ IF (HCLOUD=='LIMA') THEN IPROACTV(10,IPROC) = NSEDIRS IPROC=IPROC+1 END IF - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))& - IPROACTV(10,IPROC) = NNECONRS + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(10,IPROC) = NNECONRS ! YWORK2(10,1) = 'INIF_' YWORK2(10,2) = 'ENDF_' @@ -2207,8 +2207,8 @@ END IF YWORK2(10,IPROC) = 'DIF_' IPROC= IPROC+1 YWORK2(10,IPROC) = 'REL_' - IPROC=IPROC+1 - YWORK2(10,IPROC) = 'NETUR_' +! IPROC=IPROC+1 +! YWORK2(10,IPROC) = 'NETUR_' IPROC= IPROC+1 YWORK2(10,IPROC) = 'ADV_' IPROC=IPROC+1 @@ -2300,7 +2300,7 @@ IF (LBU_RRG) THEN IF ( OHORELAX_RG ) THEN IPROACTV(11,IPROC) = NRELRG ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(11,IPROC) = 4 @@ -2308,15 +2308,16 @@ IF (LBU_RRG) THEN IPROACTV(11,IPROC) = 3 END IF END IF - IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & - IPROACTV(11,IPROC) = NNETURRG +! IPROC=IPROC+1 +! IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & +! .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & +! IPROACTV(11,IPROC) = NNETURRG IPROC=IPROC+1 IPROACTV(11,IPROC) = NADVRG IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(11,IPROC) = NNEADVRG + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(11,IPROC) = NNEADVRG IPROC=IPROC+1 IF( HCLOUD /= 'NONE' ) IPROACTV(11,IPROC) = NNEGARG IPROC=IPROC+1 @@ -2384,9 +2385,7 @@ ELSE IPROACTV(11,IPROC) = NSEDIRG IPROC=IPROC+1 END IF - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))& - IPROACTV(11,IPROC) = NNECONRG + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(11,IPROC) = NNECONRG ! YWORK2(11,1) = 'INIF_' YWORK2(11,2) = 'ENDF_' @@ -2401,8 +2400,8 @@ END IF YWORK2(11,IPROC) = 'DIF_' IPROC=IPROC+1 YWORK2(11,IPROC) = 'REL_' - IPROC=IPROC+1 - YWORK2(11,IPROC) = 'NETUR_' +! IPROC=IPROC+1 +! YWORK2(11,IPROC) = 'NETUR_' IPROC=IPROC+1 YWORK2(11,IPROC) = 'ADV_' IPROC=IPROC+1 @@ -2512,7 +2511,7 @@ IF (LBU_RRH) THEN IF ( OHORELAX_RH ) THEN IPROACTV(12,IPROC) = NRELRH ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(12,IPROC) = 4 @@ -2520,15 +2519,16 @@ IF (LBU_RRH) THEN IPROACTV(12,IPROC) = 3 END IF END IF - IPROC=IPROC+1 - IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & - IPROACTV(12,IPROC) = NNETURRH +! IPROC=IPROC+1 +! IF (HTURB /= 'NONE' .AND. ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') & +! .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA') )) & +! IPROACTV(12,IPROC) = NNETURRH IPROC=IPROC+1 IPROACTV(12,IPROC) = NADVRH IPROC=IPROC+1 - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA')) IPROACTV(12,IPROC) = NNEADVRH + IF ( HCLOUD == 'KESS' .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'C2R2' & + .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' .OR. HCLOUD == 'LIMA' ) & + IPROACTV(12,IPROC) = NNEADVRH IPROC=IPROC+1 IF( HCLOUD /= 'NONE' ) THEN IPROACTV(12,IPROC) = NNEGARH @@ -2569,9 +2569,7 @@ IF (LBU_RRH) THEN (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) & IPROACTV(12,IPROC) = NSEDIRH END IF - IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')& - .OR. (HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'LIMA'))& - IPROACTV(12,IPROC) = NNECONRH + IF (HCLOUD /= 'NONE' .AND. CELEC == 'NONE') IPROACTV(12,IPROC) = NNECONRH ! YWORK2(12,1) = 'INIF_' YWORK2(12,2) = 'ENDF_' @@ -2586,8 +2584,8 @@ IF (LBU_RRH) THEN YWORK2(12,IPROC) = 'DIF_' IPROC=IPROC+1 YWORK2(12,IPROC) = 'REL_' - IPROC=IPROC+1 - YWORK2(12,IPROC) = 'NETUR_' +! IPROC=IPROC+1 +! YWORK2(12,IPROC) = 'NETUR_' IPROC=IPROC+1 YWORK2(12,IPROC) = 'ADV_' IPROC=IPROC+1 @@ -2659,7 +2657,7 @@ IF (LBU_RSV) THEN IF ( OHORELAX_SV(JSV) ) THEN IPROACTV(12+JSV,IPROC) = NRELSV ELSE - IF(OVE_RELAX .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & + IF(OVE_RELAX .OR. OVE_RELAX_GRD .OR. OHORELAX_UVWTH .OR. OHORELAX_RV .OR. & OHORELAX_RC .OR. OHORELAX_RR .OR. OHORELAX_RI .OR. OHORELAX_RS .OR. & OHORELAX_RG .OR. OHORELAX_RH .OR. OHORELAX_TKE .OR. ANY(OHORELAX_SV)) THEN IPROACTV(12+JSV,IPROC) = 4 @@ -2688,7 +2686,7 @@ IF (LBU_RSV) THEN IPROC=IPROC+1 IF ( HSCONV == 'EDKF' ) IPROACTV(12+JSV,IPROC)= NMAFLSV IPROC=IPROC+1 - IF ( HCLOUD /= 'LIMA' ) IPROACTV(12+JSV,IPROC)= NADVSV + IF ( HCLOUD /= 'LIMA' .AND. HCLOUD /= 'C2R2' .AND. HCLOUD /= 'KHKO' ) IPROACTV(12+JSV,IPROC)= NADVSV IPROC=IPROC+1 ! YWORK2(12+JSV,1) = 'INIF_' @@ -3003,20 +3001,47 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM ! C2R2 or KHKO Case SELECT CASE(JSV-NSV_C2R2BEG+1) CASE (1) ! Concentration of activated nuclei + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (.NOT. LSUPSAT) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_' - END IF IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEVA_' IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV CASE (2) ! Concentration of cloud droplets + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (.NOT. LSUPSAT) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_' - END IF IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + END IF ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'SELF_' IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 @@ -3036,7 +3061,22 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'CEVA_' IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV CASE (3) ! Concentration of raindrops + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'AUTO_' IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 @@ -3054,6 +3094,9 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'SEDI_' IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV END SELECT ! ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN @@ -3062,16 +3105,16 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN ! Cloud droplets conc. ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (OPTSPLIT .AND. OWARM .AND. ORAIN) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORR_' @@ -3167,22 +3210,22 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV ! ELSE IF (JSV == NSV_LIMA_NR) THEN ! Rain drops conc. ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (OPTSPLIT .AND. OWARM .AND. ORAIN) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORR_' @@ -3265,22 +3308,22 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN END IF ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV ! ELSE IF (JSV.GE.NSV_LIMA_CCN_FREE .AND. JSV.LT.(NSV_LIMA_CCN_FREE+NMOD_CCN)) THEN ! Free CCN conc. ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (OWARM .AND. OACTI .AND. NMOD_CCN.GE.1) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'HENU_' @@ -3296,7 +3339,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV IF (OSCAV) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'SCAV_' @@ -3304,25 +3347,54 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN END IF ! ELSE IF (JSV.GE.NSV_LIMA_CCN_ACTI .AND. JSV.LT.(NSV_LIMA_CCN_ACTI+NMOD_CCN)) THEN + ! Activated CCN conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 - ! Activated CCN conc. + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV + + ELSE IF (JSV == NSV_LIMA_SCAVMASS) THEN + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV ELSE IF (JSV == NSV_LIMA_NI) THEN ! Pristine ice crystals conc. ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (OPTSPLIT .AND. OCOLD .AND. OSNOW) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORR_' @@ -3408,22 +3480,22 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV ! ELSE IF (JSV.GE.NSV_LIMA_IFN_FREE .AND. JSV.LT.(NSV_LIMA_IFN_FREE+NMOD_IFN)) THEN ! Free IFN conc. ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (OCOLD .AND. ONUCL .AND. (.NOT.OMEYERS)) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'HIND_' @@ -3434,7 +3506,7 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV IF (OSCAV) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'SCAV_' @@ -3442,27 +3514,63 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN END IF ! ELSE IF (JSV.GE.NSV_LIMA_IFN_NUCL .AND. JSV.LT.(NSV_LIMA_IFN_NUCL+NMOD_IFN)) THEN + ! Nucleated IFN conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 - ! Nucleated IFN conc. + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV ELSE IF (JSV.GE.NSV_LIMA_IMM_NUCL .AND. JSV.LT.(NSV_LIMA_IMM_NUCL+NMOD_IMM)) THEN + ! Nucleated IMM conc. + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 - ! Nucleated IMM conc. + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV ELSE IF (JSV == NSV_LIMA_HOM_HAZE) THEN ! Homogeneous freezing of CCN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NETUR_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNETURSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'ADV_' - IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 + IPROACTV(12+JSV,ILAST_PROC_NBR) = NADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEADV_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEADVSV + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (.NOT.OPTSPLIT .AND. OCOLD .AND. ONUCL .AND. OWARM .AND. OHHONI) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR)= 'HONH_' IPROACTV(12+JSV,ILAST_PROC_NBR) = 1 END IF + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NECON_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNECONSV END IF @@ -3472,6 +3580,9 @@ ELSEIF (JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END) THEN ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN SELECT CASE(JSV-NSV_ELECBEG+1) CASE(1) ! volumetric charge of water vapor + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSQV @@ -3490,6 +3601,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQV CASE(2) ! volumetric charge of cloud droplets + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (LWARM) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR) = 'AUTO_' @@ -3525,6 +3639,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQC CASE(3) ! volumetric charge of rain drops + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV IF (LWARM) THEN ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR) = 'AUTO_' @@ -3558,6 +3675,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQR CASE(4) ! volumetric charge of ice crystals + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR) = 'AGGS_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NAGGSQI @@ -3592,6 +3712,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQI CASE(5) ! volumetric charge of snow + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSQS @@ -3626,6 +3749,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQS CASE(6) ! volumetric charge of graupel + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV ILAST_PROC_NBR = ILAST_PROC_NBR + 1 YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPG_' IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPGQG @@ -3658,6 +3784,9 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQG CASE(7) ! volumetric charge of hail ! add budget for hail volumetric charge + ILAST_PROC_NBR = ILAST_PROC_NBR + 1 + YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_' + IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV END SELECT ! ELSE IF (JSV >= NSV_CHEMBEG .AND. JSV <= NSV_CHEMEND) THEN diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90 index c6f6b991f6edda384225b3e5c44563d215674ae1..7f4e0225444fc2c24a8ea7b01af2a5a865b1cadd 100644 --- a/src/MNH/ini_micron.f90 +++ b/src/MNH/ini_micron.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-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. @@ -50,11 +50,12 @@ END MODULE MODI_INI_MICRO_n !! O.Geoffroy (03/2006) : Add KHKO scheme !! Modification 01/2016 (JP Pinty) Add LIMA !! C.LAc 10/2016 Add budget for droplet deposition -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! P.Wautelet 01/2019: bug: add missing allocations -! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 01/2019: bugfix: add missing allocations ! C. Lac 02/2020: add missing allocation of INPRC and ACPRC with deposition -!! -------------------------------------------------------------------------- +! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables +! P. Wautelet 04/06/2020: bugfix: correct bounds of passed arrays +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -94,6 +95,7 @@ USE MODI_SET_CONC_ICE_C1R3 USE MODE_ll USE MODE_MODELN_HANDLER USE MODE_BLOWSNOW_SEDIM_LKT +USE MODE_SET_CONC_LIMA ! USE MODD_NSV, ONLY : NSV,NSV_CHEM,NSV_C2R2BEG,NSV_C2R2END, & NSV_C1R3BEG,NSV_C1R3END, & @@ -109,7 +111,6 @@ USE MODD_LIMA_PRECIP_SCAVENGING_n ! USE MODI_INIT_AEROSOL_CONCENTRATION USE MODI_INI_LIMA -USE MODI_SET_CONC_LIMA ! IMPLICIT NONE ! @@ -140,6 +141,7 @@ INTEGER :: IMI ! CALL GET_DIM_EXT_ll('B',IIU,IJU) IKU=SIZE(XZZ,3) +IMI = GET_CURRENT_MODEL_INDEX() ! ! !* 2. ALLOCATE Module MODD_PRECIP_n @@ -291,11 +293,7 @@ ELSE IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN CALL INI_ICE_C1R3(XTSTEP,ZDZMIN,NSPLITG) ! 1/2 spectral cold cloud END IF ELSE IF (CCLOUD == 'LIMA') THEN - IF (CGETCLOUD /= 'READ') THEN - CALL INIT_AEROSOL_CONCENTRATION(XRHODREF, & - XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - XZZ(:,:,:) ) - END IF + IF (CGETCLOUD /= 'READ') CALL INIT_AEROSOL_CONCENTRATION( XRHODREF, XSVT(:, :, :, :), XZZ(:, :, :) ) CALL INI_LIMA(XTSTEP,ZDZMIN,NSPLITR, NSPLITG) ! 1/2 spectral warm cloud END IF ! @@ -317,7 +315,7 @@ ENDIF ! IF (CCLOUD == 'LIMA') THEN IF (CGETCLOUD/='READ') THEN - CALL SET_CONC_LIMA(CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)) + CALL SET_CONC_LIMA(IMI,CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)) END IF END IF ! @@ -326,7 +324,6 @@ END IF ! ---------------------------------- ! ! -IMI = GET_CURRENT_MODEL_INDEX() !IF (CELEC /= 'NONE') THEN ! CALL INI_ELEC(IMI,TPINIFILE,XTSTEP,ZDZMIN,NSPLITR, & ! XDXX,XDYY,XDZZ,XDZX,XDZY ) diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 2548b6a26f8be699774ce2dfa6ace5a71d9d279d..140fb9caf5d8067eff5f5710b7e1cf7641cf9d43 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -1659,7 +1659,8 @@ IF ( CBUTYPE /= "NONE" .AND. NBUMOD == KMI ) THEN 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,LCHTRANS,LNUDGING,LDRAGTREE,LDEPOTREE, & + LHORELAX_SV,LVE_RELAX,LVE_RELAX_GRD, & + LCHTRANS,LNUDGING,LDRAGTREE,LDEPOTREE, & CRAD,CDCONV,CSCONV,CTURB,CTURBDIM,CCLOUD ) END IF ! diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90 index 582bcac1eedeaa9c95d03fcf22910247bccb5259..fffb5f8d6f5bd2a47ea253c49cd177eb765a4e8b 100644 --- a/src/MNH/ini_one_wayn.f90 +++ b/src/MNH/ini_one_wayn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1999-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1999-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. @@ -85,10 +85,11 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,KMI, & !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 !! B.VIE 2016 : LIMA -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 03/05/2019: restructuration of one_wayn and ini_one_wayn +! P. Wautelet 04/06/2020: correct call to Set_conc_lima + initialize ZCONCM ! !------------------------------------------------------------------------------ ! @@ -112,10 +113,10 @@ use mode_ll, only: GET_CHILD_DIM_ll, GET_DIM_EXT_ll, GO_TOMODEL_ll, LS_FORCING_ll, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll, & SET_LSFIELD_1WAY_ll, UNSET_LSFIELD_1WAY_ll USE MODE_MODELN_HANDLER, only: GOTO_MODEL +USE MODE_SET_CONC_LIMA ! USE MODI_SET_CHEMAQ_1WAY USE MODI_SET_CONC_ICE_C1R3 -USE MODI_SET_CONC_LIMA USE MODI_SET_CONC_RAIN_C2R2 ! ! @@ -346,12 +347,13 @@ ENDIF IF (HCLOUD=="LIMA" ) THEN IF (CCLOUD/="LIMA") THEN ALLOCATE(ZCONCM(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),NSV_LIMA_A(KMI))) + ZCONCM(:, :, :, :) = 0. IF (CCLOUD == "REVE") THEN ZINIT_TYPE = "INI1" ELSE ZINIT_TYPE = "NONE" END IF - CALL SET_CONC_LIMA (ZINIT_TYPE,XRHODREF,XRT,ZCONCM) + CALL SET_CONC_LIMA (KMI,ZINIT_TYPE,XRHODREF,XRT,ZCONCM) DO JSV=1,NSV_LIMA_A(KMI) CALL SET_LSFIELD_1WAY_ll(ZCONCM(:,:,:,JSV),& &ZTSVM(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI) diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90 index eded99bf5b50b499036ac347716a959a350e790f..320f6b1dc92ca461ff816bac677bb2315ec47805 100644 --- a/src/MNH/latlon_to_xy.f90 +++ b/src/MNH/latlon_to_xy.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-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. @@ -54,14 +54,17 @@ !! remove the USE MODI_DEFAULT_DESFM Apr. 17, 1996 (J.Stein) !! no transfer of the file when closing Dec. 09, 1996 (V.Masson) !! + changes call to READ_HGRID -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! P. Wautelet 10/04/2020: add missing initializations (LATLON_TO_XY was not working) !---------------------------------------------------------------------------- ! !* 0. DECLARATION ! ----------- ! +use MODD_CONF, only: CPROGRAM +USE MODD_DIM_n USE MODD_GRID USE MODD_IO, ONLY: TFILEDATA USE MODD_PGDDIM @@ -69,10 +72,16 @@ USE MODD_PGDGRID USE MODD_PARAMETERS USE MODD_LUNIT ! +USE MODE_FIELD, ONLY: INI_FIELD_LIST USE MODE_GRIDPROJ USE MODE_IO, only: IO_Config_set, IO_Init +use MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_IO_FILE, only: IO_File_close, IO_File_open USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list +use MODE_INIT_ll, only: SET_DIM_ll, SET_JP_ll +USE MODE_MODELN_HANDLER, ONLY: GOTO_MODEL +USE MODE_POS, ONLY: POSNAM +use MODE_SPLITTINGZ_ll ! USE MODI_INI_CST USE MODI_READ_HGRID @@ -99,6 +108,7 @@ INTEGER :: II,IJ ! indexes of the point REAL :: ZI,ZJ ! fractionnal indexes of the point TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL() TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() +LOGICAL :: GFOUND ! !* 0.3 Declaration of namelists ! ------------------------ @@ -115,19 +125,38 @@ NAMELIST/NAM_INIFILE/ YINIFILE !* 1. Initializations ! --------------- ! -CALL INI_CST +CALL GOTO_MODEL(1) +! +CALL VERSION() +! +CPROGRAM='LAT2XY' +! +CALL IO_Init() +! +CALL INI_CST() +! +CALL INI_FIELD_LIST(1) ! !* 2. Reading of namelist file ! ------------------------ ! -CALL IO_Init() ! CALL IO_File_add2list(TZNMLFILE,'LATLON2XY1.nam','NML','READ') CALL IO_File_open(TZNMLFILE) INAM=TZNMLFILE%NLU -READ(INAM,NAM_INIFILE) ! -READ(INAM,NAM_CONFIO) +CALL POSNAM(INAM,'NAM_INIFILE',GFOUND) +IF (GFOUND) THEN + READ(UNIT=INAM,NML=NAM_INIFILE) + PRINT*, ' namelist NAM_INIFILE read' +END IF +! +CALL POSNAM(INAM,'NAM_CONFIO',GFOUND) +IF (GFOUND) THEN + READ(UNIT=INAM,NML=NAM_CONFIO) + PRINT*, ' namelist NAM_CONFIO read' +END IF +! CALL IO_Config_set() CALL IO_File_close(TZNMLFILE) ! @@ -137,6 +166,15 @@ CALL IO_File_close(TZNMLFILE) CALL IO_File_add2list(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2) CALL IO_File_open(TZINIFILE) ! +CALL IO_Field_read(TZINIFILE,'IMAX', NIMAX) +CALL IO_Field_read(TZINIFILE,'JMAX', NJMAX) +NKMAX = 1 +CALL IO_Field_read(TZINIFILE,'JPHEXT',JPHEXT) +! +CALL SET_JP_ll(1,JPHEXT,JPVEXT,JPHEXT) +CALL SET_DIM_ll(NIMAX, NJMAX, NKMAX) +CALL INI_PARAZ_ll(IRESP) +! !* 2. Reading of MESONH file ! ---------------------- ! diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90 index 8c4538828cc25fc32b411db1fe67adff293687b8..828ca19e871ea25a1f1d20ba2e94dbc0e7e6a7a7 100644 --- a/src/MNH/lima.f90 +++ b/src/MNH/lima.f90 @@ -19,7 +19,8 @@ INTERFACE PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, & PEVAP3D ) ! -USE MODD_IO, ONLY: TFILEDATA +USE MODD_IO, ONLY: TFILEDATA +USE MODD_NSV, only: NSV_LIMA_BEG ! INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index @@ -44,12 +45,12 @@ INTEGER, INTENT(IN) :: NIMM ! for array size declarati REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! Theta at time t-dt REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Mixing ratios at time t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at time t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! w for CCN activation ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Mixing ratios sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations sources +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC ! Cloud instant precip REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP ! Cloud droplets deposition @@ -96,20 +97,21 @@ END MODULE MODI_LIMA !! ------------- !! Original 15/03/2018 !! -!! B.Vié 02/2019 : minor correction on budget -!! P. Wautelet 26/02/2020: bugfix: corrected condition to write budget CORR_BU_RRS -!! B.Vié 03/03/2020 : use DTHRAD instead of dT/dt in Smax diagnostic computation +! B. Vié 02/2019: minor correction on budget +! P. Wautelet 26/02/2020: bugfix: corrected condition to write budget CORR_BU_RRS +! B. Vié 03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation +! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS +!----------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ USE MODD_BUDGET, ONLY: LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV -USE MODD_CLOUDPAR_n, ONLY: NSPLITR, NSPLITG USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, XP00, XRD USE MODD_IO, ONLY: TFILEDATA -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_NSV, ONLY: NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & - NSV_LIMA_SCAVMASS, NSV_LIMA_NI, NSV_LIMA_IFN_FREE, & +USE MODD_NSV, ONLY: NSV_LIMA_BEG, & + NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & + NSV_LIMA_NI, NSV_LIMA_IFN_FREE, & NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI, & @@ -155,12 +157,12 @@ INTEGER, INTENT(IN) :: NIMM ! for array size declarati REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! Theta at time t-dt REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Mixing ratios at time t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at time t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! w for CCN activation ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Mixing ratios sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations sources +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC ! Cloud instant precip REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP ! Cloud droplets deposition diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90 index e9c32bb0b1f2d0dbaa9350bf39874076ba7376cf..9deec2f3ba0354fad23cecb92c5dd1b4d8c1a527 100644 --- a/src/MNH/lima_adjust.f90 +++ b/src/MNH/lima_adjust.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -15,7 +15,8 @@ INTERFACE PRT, PRS, PSVT, PSVS, & PTHS, PSRCS, PCLDFR ) ! -USE MODD_IO, ONLY: TFILEDATA +USE MODD_IO, ONLY: TFILEDATA +USE MODD_NSV, only: NSV_LIMA_BEG ! INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KMI ! Model index @@ -41,9 +42,9 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t ! REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source ! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentration source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source ! @@ -134,10 +135,10 @@ END MODULE MODI_LIMA_ADJUST !! Original ??/??/13 !! C. Barthe * LACy* jan. 2014 add budgets !! JP Chaboureau *LA* March 2014 fix the calculation of icy cloud fraction -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 -! +! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -193,9 +194,9 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t ! REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source ! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentration source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source ! diff --git a/src/MNH/lima_cold.f90 b/src/MNH/lima_cold.f90 index 28b88ca60f3aa5848d53e9e1863dc8ed44ecf251..f5c8726ede8158f27e61371666eb3c98522c6842 100644 --- a/src/MNH/lima_cold.f90 +++ b/src/MNH/lima_cold.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. !----------------------------------------------------------------- ! ##################### @@ -16,7 +16,9 @@ INTERFACE PTHS, PRS, PSVS, & PINPRS, PINPRG, PINPRH) ! -LOGICAL, INTENT(IN) :: OSEDI ! switch to activate the +USE MODD_NSV, only: NSV_LIMA_BEG +! +LOGICAL, INTENT(IN) :: OSEDI ! switch to activate the ! cloud ice sedimentation LOGICAL, INTENT(IN) :: OHHONI ! enable haze freezing INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step @@ -39,11 +41,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip @@ -106,8 +108,8 @@ END MODULE MODI_LIMA_COLD !! MODIFICATIONS !! ------------- !! Original ??/??/13 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -151,11 +153,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip @@ -349,8 +351,7 @@ IF (LNUCL) THEN PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PTHS, PRVS, PRCS, PRRS, PRIS, PRGS, & PCCT, & - PCCS, PCRS, PNFS, & - PCIS, PNIS, PNHS ) + PCCS, PCRS, PNFS, PCIS, PNHS ) END IF ! END IF diff --git a/src/MNH/lima_cold_hom_nucl.f90 b/src/MNH/lima_cold_hom_nucl.f90 index f6c3f42114c5cbff0cece4bbef71e1eaf538c2cb..48e7cab39d0c14676c4cdb76ee7e8b42e6e5d69d 100644 --- a/src/MNH/lima_cold_hom_nucl.f90 +++ b/src/MNH/lima_cold_hom_nucl.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -14,8 +14,7 @@ INTERFACE PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PTHS, PRVS, PRCS, PRRS, PRIS, PRGS, & PCCT, & - PCCS, PCRS, PNFS, & - PCIS, PNIS, PNHS ) + PCCS, PCRS, PNFS, PCIS, PNHS ) ! LOGICAL, INTENT(IN) :: OHHONI ! enable haze freezing REAL, INTENT(IN) :: PTSTEP ! Time step @@ -53,8 +52,6 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFS ! CCN C. available source !HOMOGENEOUS nucleation of haze ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIS ! Ice crystal C. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIS ! Activated ice nuclei C. source - !for IMMERSION REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNHS ! haze homogeneous freezing ! END SUBROUTINE LIMA_COLD_HOM_NUCL @@ -68,8 +65,7 @@ END MODULE MODI_LIMA_COLD_HOM_NUCL PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PTHS, PRVS, PRCS, PRRS, PRIS, PRGS, & PCCT, & - PCCS, PCRS, PNFS, & - PCIS, PNIS, PNHS ) + PCCS, PCRS, PNFS, PCIS, PNHS ) ! ###################################################################### ! !! PURPOSE @@ -90,9 +86,10 @@ END MODULE MODI_LIMA_COLD_HOM_NUCL !! Original ??/??/13 !! C. Barthe * LACy* jan. 2014 add budgets !! B.Vie 10/2016 Bug zero division -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! M. Leriche 05/2019: suppress unused actived coated IN (immersion) source ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 -! +! B. Vie 03/2020: correction of budgets parallelization !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -157,8 +154,6 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFS ! CCN C. available source !HOMOGENEOUS nucleation of haze ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIS ! Ice crystal C. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIS ! Activated ice nuclei C. source - !for IMMERSION REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNHS ! haze homogeneous freezing ! !* 0.2 Declarations of local variables : @@ -184,8 +179,6 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZCCS ! Cloud water conc. source REAL, DIMENSION(:), ALLOCATABLE :: ZCRS ! Rain water conc. source REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFS ! available nucleus conc. source REAL, DIMENSION(:), ALLOCATABLE :: ZCIS ! Pristine ice conc. source -REAL, DIMENSION(:,:), ALLOCATABLE :: ZNIS ! Nucleated Ice nuclei conc. source - !by Immersion REAL, DIMENSION(:), ALLOCATABLE :: ZZNHS ! Nucleated Ice nuclei conc. source !by Homogeneous freezing ! @@ -283,7 +276,6 @@ IF (INEGT.GT.0) THEN ALLOCATE(ZCIS(INEGT)) ! ALLOCATE(ZNFS(INEGT,NMOD_CCN)) - ALLOCATE(ZNIS(INEGT,NMOD_IMM)) ALLOCATE(ZZNHS(INEGT)) ! ALLOCATE(ZRHODREF(INEGT)) @@ -316,9 +308,6 @@ IF (INEGT.GT.0) THEN DO JMOD_CCN = 1, NMOD_CCN ZNFS(JL,JMOD_CCN) = PNFS(I1(JL),I2(JL),I3(JL),JMOD_CCN) ENDDO - DO JMOD_IMM = 1, NMOD_IMM - ZNIS(JL,JMOD_IMM) = PNIS(I1(JL),I2(JL),I3(JL),JMOD_IMM) - ENDDO ZZNHS(JL) = ZNHS(I1(JL),I2(JL),I3(JL)) ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) @@ -443,33 +432,33 @@ IF (INEGT.GT.0) THEN ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RHHONI)) ZCIS(:) = ZCIS(:) + ZZX(:) ! +! + ZW(:,:,:) = PRVS(:,:,:) + PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) END IF ! OHHONI +END IF ! INEGT (exclude calls to BUDGET from INEGT test ! ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI .AND. NMOD_CCN.GT.0 ) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONH_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HONH_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HONH_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HONH_BU_RSV') ! RCI - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& - 12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') - END DO - CALL BUDGET ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),& - 12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') - - END IF - END IF +IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI .AND. NMOD_CCN.GT.0 ) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONH_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HONH_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONH_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONH_BU_RSV') + IF (NMOD_CCN.GE.1) THEN + DO JL=1, NMOD_CCN + CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') + END DO + CALL BUDGET (PNHS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') + END IF END IF +END IF ! ! !------------------------------------------------------------------------------- @@ -483,44 +472,48 @@ IF (INEGT.GT.0) THEN ! -> Pruppacher(1995) ! IF (LWARM) THEN - ZZW(:) = 0.0 - ZZX(:) = 0.0 - WHERE( (ZZT(:)<XTT-35.0) .AND. (ZCCT(:)>XCTMIN(2)) .AND. (ZRCT(:)>XRTMIN(2)) ) - ZLBDAC(:) = XLBC*ZCCT(:) / (ZRCT(:)) ! Lambda_c**3 - ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/ZLBDAC(:))*PTSTEP* & - EXP( XTEXP1_HONC + ZTCELSIUS(:)*( & - XTEXP2_HONC + ZTCELSIUS(:)*( & - XTEXP3_HONC + ZTCELSIUS(:)*( & - XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC - ZZW(:) = ZCCS(:) * (1.0 - ZZX(:)) ! CCHONI -! - ZCCS(:) = ZCCS(:) - ZZW(:) - ZCIS(:) = ZCIS(:) + ZZW(:) -! - ZZW(:) = ZRCS(:) * (1.0 - ZZX(:)) ! RCHONI -! - ZRCS(:) = ZRCS(:) - ZZW(:) - ZRIS(:) = ZRIS(:) + ZZW(:) - ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI)) - END WHERE -! + IF (INEGT.GT.0) THEN + ZZW(:) = 0.0 + ZZX(:) = 0.0 + WHERE( (ZZT(:)<XTT-35.0) .AND. (ZCCT(:)>XCTMIN(2)) .AND. (ZRCT(:)>XRTMIN(2)) ) + ZLBDAC(:) = XLBC*ZCCT(:) / (ZRCT(:)) ! Lambda_c**3 + ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/ZLBDAC(:))*PTSTEP* & + EXP( XTEXP1_HONC + ZTCELSIUS(:)*( & + XTEXP2_HONC + ZTCELSIUS(:)*( & + XTEXP3_HONC + ZTCELSIUS(:)*( & + XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC + ZZW(:) = ZCCS(:) * (1.0 - ZZX(:)) ! CCHONI + ! + ZCCS(:) = ZCCS(:) - ZZW(:) + ZCIS(:) = ZCIS(:) + ZZW(:) + ! + ZZW(:) = ZRCS(:) * (1.0 - ZZX(:)) ! RCHONI + ! + ZRCS(:) = ZRCS(:) - ZZW(:) + ZRIS(:) = ZRIS(:) + ZZW(:) + ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI)) + END WHERE + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& - 7,'HONC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HONC_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NC,'HONC_BU_RSV') - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HONC_BU_RSV') - END IF + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HONC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONC_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HONC_BU_RSV') + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONC_BU_RSV') + END IF END IF END IF ! @@ -535,31 +528,34 @@ END IF ! Compute the drop homogeneous nucleation source: RRHONG ! IF (LWARM .AND. LRAIN) THEN - ZZW(:) = 0.0 - WHERE( (ZZT(:)<XTT-35.0) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) ) - ZZW(:) = ZRRS(:) ! Instantaneous freezing of the raindrops - ZRRS(:) = ZRRS(:) - ZZW(:) - ZRGS(:) = ZRGS(:) + ZZW(:) - ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRHONG)) -! - ZCRS(:) = 0.0 ! No more raindrops when T<-35 C - ENDWHERE -! -! Budget storage + IF (INEGT.GT.0) THEN + ZZW(:) = 0.0 + WHERE( (ZZT(:)<XTT-35.0) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) ) + ZZW(:) = ZRRS(:) ! Instantaneous freezing of the raindrops + ZRRS(:) = ZRRS(:) - ZZW(:) + ZRGS(:) = ZRGS(:) + ZZW(:) + ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRHONG)) + ! + ZCRS(:) = 0.0 ! No more raindrops when T<-35 C + ENDWHERE + ! + ZW(:,:,:) = PRRS(:,:,:) + PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRGS(:,:,:) + PRGS(:,:,:) = UNPACK( ZRGS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + END IF + ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONR_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:),MASK=GNEGT(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:),& - 8,'HONR_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:),MASK=GNEGT(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:),& - 11,'HONR_BU_RRG') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NR,'HONR_BU_RSV') - END IF + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONR_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HONR_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HONR_BU_RRG') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HONR_BU_RSV') + END IF END IF END IF ! @@ -570,27 +566,7 @@ END IF !* 4. Unpack variables, clean ! ----------------------- ! -! -! End of homogeneous nucleation processes -! - ZW(:,:,:) = PRVS(:,:,:) - PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRCS(:,:,:) - PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRRS(:,:,:) - PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRIS(:,:,:) - PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRGS(:,:,:) - PRGS(:,:,:) = UNPACK( ZRGS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PTHS(:,:,:) - PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCCS(:,:,:) - PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCRS(:,:,:) - PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCIS(:,:,:) - PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +IF (INEGT.GT.0) THEN ! DEALLOCATE(ZRVT) DEALLOCATE(ZRCT) @@ -614,7 +590,6 @@ END IF DEALLOCATE(ZCIS) ! DEALLOCATE(ZNFS) - DEALLOCATE(ZNIS) DEALLOCATE(ZZNHS) ! DEALLOCATE(ZRHODREF) @@ -632,57 +607,6 @@ END IF DEALLOCATE(ZZX) DEALLOCATE(ZZY) ! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,4,'HONH_BU_RTH') - IF (LWARM) CALL BUDGET (ZW,4,'HONC_BU_RTH') - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,4,'HONR_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,6,'HONH_BU_RRV') - ENDIF - IF (LBUDGET_RC) THEN - ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM) CALL BUDGET (ZW,7,'HONC_BU_RRC') - ENDIF - IF (LBUDGET_RR) THEN - ZW(:,:,:) = PRRS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,8,'HONR_BU_RRR') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,9,'HONH_BU_RRI') - IF (LWARM) CALL BUDGET (ZW,9,'HONC_BU_RRI') - ENDIF - IF (LBUDGET_RG) THEN - ZW(:,:,:) = PRGS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,11,'HONR_BU_RRG') - ENDIF - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NC,'HONC_BU_RSV') - ZW(:,:,:) = PCRS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,12+NSV_LIMA_NR,'HONR_BU_RSV') - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONH_BU_RSV') - IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONC_BU_RSV') - IF( OHHONI .AND. NMOD_CCN.GT.0 ) THEN - DO JL=1, NMOD_CCN - ZW(:,:,:) = PNFS(:,:,:,JL)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') - END DO - ZW(:,:,:) = ZNHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') - END IF - END IF - END IF -! END IF ! INEGT>0 ! ! diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90 index 1973c65f3d23fa1a538243e90ac5371ad626d50c..f65625b0eb8fe18a6ece811c4d1b71242abcbd6b 100644 --- a/src/MNH/lima_cold_slow_processes.f90 +++ b/src/MNH/lima_cold_slow_processes.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -77,8 +77,9 @@ END MODULE MODI_LIMA_COLD_SLOW_PROCESSES !! ------------- !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! B. Vie 03/2020: correction of budgets parallelization ! !------------------------------------------------------------------------------- ! @@ -351,25 +352,27 @@ IF( IMICRO >= 1 ) THEN ZZW(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*ZCJ(:) )/( XR0DEPSI+XR1DEPSI*ZCJ(:) ) ZCIS(:) = ZCIS(:) + ZZW(:) END WHERE + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! IMICRO ! ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'CNVI_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'CNVI_BU_RRS') - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CNVI_BU_RSV') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CNVI_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CNVI_BU_RRS') + IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CNVI_BU_RSV') + END IF ! ! !* 2.2 Deposition of water vapor on r_s: RVDEPS ! ----------------------------------------------- ! ! + IF( IMICRO >= 1 ) THEN ZZW(:) = 0.0 WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) ) ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & @@ -380,25 +383,27 @@ IF( IMICRO >= 1 ) THEN ZRVS(:) = ZRVS(:) - ZZW(:) ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) END WHERE -! + ! + ZW(:,:,:) = PRVS(:,:,:) + PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'DEPS_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'DEPS_BU_RRV') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'DEPS_BU_RRS') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS') + END IF ! ! !* 2.3 Conversion of pristine ice to r_s: RICNVS ! ------------------------------------------------ ! ! + IF( IMICRO >= 1 ) THEN ZZW(:) = 0.0 WHERE ( (ZLBDAI(:)<XLBDAICNVS_LIM) .AND. (ZCIT(:)>XCTMIN(4)) & .AND. (ZSSI(:)>0.0) ) @@ -417,24 +422,26 @@ IF( IMICRO >= 1 ) THEN ZCIS(:) = ZCIS(:) - ZZW(:) END WHERE ! + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'CNVS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'CNVS_BU_RRS') - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CNVS_BU_RSV') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CNVS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CNVS_BU_RRS') + IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CNVS_BU_RSV') + END IF ! ! !* 2.4 Aggregation of r_i on r_s: CIAGGS and RIAGGS ! --------------------------------------------------- ! ! + IF( IMICRO >= 1 ) THEN WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) & .AND. (ZCIS(:)>ZCTMIN(4)) ) ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3 @@ -448,19 +455,20 @@ IF( IMICRO >= 1 ) THEN ZRIS(:) = ZRIS(:) - ZZW1(:,2) ZRSS(:) = ZRSS(:) + ZZW1(:,2) END WHERE -! + ! + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'AGGS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'AGGS_BU_RRS') - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'AGGS_BU_RSV') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS') + IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'AGGS_BU_RSV') + END IF ! ! !------------------------------------------------------------------------------ @@ -469,90 +477,38 @@ IF( IMICRO >= 1 ) THEN !* 3. Unpacking & Deallocating ! ------------------------ ! -! + IF( IMICRO >= 1 ) THEN + DEALLOCATE(ZRVT) + DEALLOCATE(ZRCT) + DEALLOCATE(ZRRT) + DEALLOCATE(ZRIT) + DEALLOCATE(ZRST) + DEALLOCATE(ZRGT) + DEALLOCATE(ZCIT) + DEALLOCATE(ZRVS) + DEALLOCATE(ZRIS) + DEALLOCATE(ZRSS) + DEALLOCATE(ZTHS) + DEALLOCATE(ZCIS) + DEALLOCATE(ZRHODREF) + DEALLOCATE(ZZT) + DEALLOCATE(ZPRES) + DEALLOCATE(ZEXNREF) + DEALLOCATE(ZZW) + DEALLOCATE(ZZX) + DEALLOCATE(ZLSFACT) + DEALLOCATE(ZSSI) + DEALLOCATE(ZLBDAI) + DEALLOCATE(ZLBDAS) + DEALLOCATE(ZAI) + DEALLOCATE(ZCJ) + DEALLOCATE(ZKA) + DEALLOCATE(ZDV) + DEALLOCATE(ZZW1) + IF (NBUMOD==KMI .AND. LBU_ENABLE) DEALLOCATE(ZRHODJ) + END IF ! - ZW(:,:,:) = PRVS(:,:,:) - PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRIS(:,:,:) - PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRSS(:,:,:) - PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - ZW(:,:,:) = PCIS(:,:,:) - PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - ZW(:,:,:) = PTHS(:,:,:) - PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - DEALLOCATE(ZRVT) - DEALLOCATE(ZRCT) - DEALLOCATE(ZRRT) - DEALLOCATE(ZRIT) - DEALLOCATE(ZRST) - DEALLOCATE(ZRGT) - DEALLOCATE(ZCIT) - DEALLOCATE(ZRVS) - DEALLOCATE(ZRIS) - DEALLOCATE(ZRSS) - DEALLOCATE(ZTHS) - DEALLOCATE(ZCIS) - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZT) - DEALLOCATE(ZPRES) - DEALLOCATE(ZEXNREF) - DEALLOCATE(ZZW) - DEALLOCATE(ZZX) - DEALLOCATE(ZLSFACT) - DEALLOCATE(ZSSI) - DEALLOCATE(ZLBDAI) - DEALLOCATE(ZLBDAS) - DEALLOCATE(ZAI) - DEALLOCATE(ZCJ) - DEALLOCATE(ZKA) - DEALLOCATE(ZDV) - DEALLOCATE(ZZW1) - IF (NBUMOD==KMI .AND. LBU_ENABLE) DEALLOCATE(ZRHODJ) -! -! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'DEPS_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'DEPS_BU_RRV') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'CNVI_BU_RRI') - CALL BUDGET (ZW,9,'CNVS_BU_RRI') - CALL BUDGET (ZW,9,'AGGS_BU_RRI') - ENDIF - IF (LBUDGET_RS) THEN - ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,10,'CNVI_BU_RRS') - CALL BUDGET (ZW,10,'DEPS_BU_RRS') - CALL BUDGET (ZW,10,'CNVS_BU_RRS') - CALL BUDGET (ZW,10,'AGGS_BU_RRS') - ENDIF - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV') - ENDIF - ENDIF -! -END IF -! -!++cb++ -DEALLOCATE(ZRTMIN) -DEALLOCATE(ZCTMIN) -!--cb-- + DEALLOCATE(ZRTMIN) + DEALLOCATE(ZCTMIN) ! -END SUBROUTINE LIMA_COLD_SLOW_PROCESSES + END SUBROUTINE LIMA_COLD_SLOW_PROCESSES diff --git a/src/MNH/lima_meyers.f90 b/src/MNH/lima_meyers.f90 index 775a104ec5eb74d5d885a93f146f53c2deac0d91..39841aa20b7615886eea1b02ba8b982dbff1f5fb 100644 --- a/src/MNH/lima_meyers.f90 +++ b/src/MNH/lima_meyers.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -106,8 +106,9 @@ END MODULE MODI_LIMA_MEYERS !! ------------- !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! B. Vie 03/2020: correction of budgets parallelization ! !------------------------------------------------------------------------------- ! @@ -336,26 +337,32 @@ IF( INEGT >= 1 ) THEN ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RVHNDI)) ZCIS(:) = ZCIS(:) + ZZX(:) ! +!* unpack variables +! + ZW(:,:,:) = PRVS(:,:,:) + PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +! +END IF ! ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HIND_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HIND_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HIND_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HIND_BU_RSV') - END IF - END IF +IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV') + END IF +END IF ! !* compute the heterogeneous nucleation by contact: RVHNCI ! +IF( INEGT >= 1 ) THEN DO JL=1,INEGT ZINS(JL,1) = PINS(I1(JL),I2(JL),I3(JL),1) END DO @@ -394,18 +401,6 @@ IF( INEGT >= 1 ) THEN PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) ZW(:,:,:) = PCIS(:,:,:) PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -! -! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') - END IF - END IF - ! DEALLOCATE(ZRVT) DEALLOCATE(ZRCT) @@ -438,43 +433,19 @@ IF( INEGT >= 1 ) THEN DEALLOCATE(ZLSFACT) DEALLOCATE(ZLVFACT) ! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'HIND_BU_RTH') - CALL BUDGET (ZW,4,'HINC_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'HIND_BU_RRV') - ENDIF - IF (LBUDGET_RC) THEN - ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'HINC_BU_RRC') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'HIND_BU_RRI') - CALL BUDGET (ZW,9,'HINC_BU_RRI') - ENDIF - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV') - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV') - END IF - END IF +END IF ! +! Budget storage +IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') + END IF END IF - - - - +! ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima_mixed.f90 b/src/MNH/lima_mixed.f90 index 7525be5b3a195b44b6020d8f7d0320b66a0b089b..a858e7aaa07fc6bc2a673cb725c9785241b6199b 100644 --- a/src/MNH/lima_mixed.f90 +++ b/src/MNH/lima_mixed.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -15,7 +15,9 @@ INTERFACE PTHT, PRT, PSVT, & PTHS, PRS, PSVS) ! -LOGICAL, INTENT(IN) :: OSEDI ! switch to activate the +USE MODD_NSV, only: NSV_LIMA_BEG +! +LOGICAL, INTENT(IN) :: OSEDI ! switch to activate the ! cloud ice sedimentation LOGICAL, INTENT(IN) :: OHHONI ! enable haze freezing INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step @@ -38,12 +40,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t - +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! END SUBROUTINE LIMA_MIXED END INTERFACE @@ -91,8 +92,9 @@ END MODULE MODI_LIMA_MIXED !! ------------- !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! B. Vie 03/2020: correction of budgets parallelization +! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -143,12 +145,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t - +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! !* 0.2 Declarations of local variables : ! @@ -378,7 +379,7 @@ GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = PRCT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(2) .OR. & ! IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:)) ! -IF( IMICRO >= 1 ) THEN +IF( IMICRO >= 0 ) THEN ! ALLOCATE(ZRVT(IMICRO)) ALLOCATE(ZRCT(IMICRO)) diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90 index 2588a5e56621231849adf05c168517b7a52cb714..9526dafa32b87f94faac15464a80f24cbfc0ea98 100644 --- a/src/MNH/lima_nucleation_procs.f90 +++ b/src/MNH/lima_nucleation_procs.f90 @@ -69,6 +69,7 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, OCLOSE_OUT, PRHODJ, !! MODIFICATIONS !! ------------- !! Original 15/03/2018 +!! M. Leriche (06/19) : missing update of PNFT after CCN hom. ncl. ! P. Wautelet 27/02/2020: bugfix: PNFT was not updated after LIMA_CCN_HOM_FREEZING ! P. Wautelet 27/02/2020: add Z_TH_HINC variable (for budgets) ! B. Vie 03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation @@ -290,7 +291,9 @@ PTHT(:,:,:) = ZTHT(:,:,:) PRVT(:,:,:) = ZRVT(:,:,:) PRIT(:,:,:) = ZRIT(:,:,:) PCIT(:,:,:) = ZCIT(:,:,:) -PNFT(:,:,:,:) = ZNFT(:,:,:,:) +DO JL=1, NMOD_CCN + PNFT(:,:,:,JL) = ZNFT(:,:,:,JL) +ENDDO PNHT(:,:,:) = ZNHT(:,:,:) ENDIF ! diff --git a/src/MNH/lima_phillips.f90 b/src/MNH/lima_phillips.f90 index 03af388b71ef40b0ad5e71b8ddea351a304c1483..649e71a18f27fd059555d784b2742682ac6eab7e 100644 --- a/src/MNH/lima_phillips.f90 +++ b/src/MNH/lima_phillips.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -115,8 +115,9 @@ END MODULE MODI_LIMA_PHILLIPS !! ------------- !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! B. Vie 03/2020: Correction of budgets parallelization ! !------------------------------------------------------------------------------- ! @@ -465,27 +466,29 @@ DO JMOD_IFN = 1,NMOD_IFN ! IFN modes ZCIS(:) = ZCIS(:) + ZZX(:) END DO ! +ZW(:,:,:) = PRVS(:,:,:) +PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +ZW(:,:,:) = PRIS(:,:,:) +PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +ZW(:,:,:) = PTHS(:,:,:) +PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +ZW(:,:,:) = PCIS(:,:,:) +PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +END IF ! INEGT - call budget out of INEGT test ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HIND_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HIND_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HIND_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HIND_BU_RSV') - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') - END DO - END IF - END IF + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV') + IF (NMOD_IFN.GE.1) THEN + DO JL=1, NMOD_IFN + CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') + END DO + END IF + END IF END IF ! ! @@ -500,58 +503,63 @@ END IF ! Currently, we represent coated IFN as a pure aerosol type (NIND_SPECIE) ! ! -DO JMOD_IMM = 1,NMOD_IMM ! Coated IFN modes - JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode - IF (JMOD_CCN .GT. 0) THEN -! -! OLD LIMA : Compute the appropriate mean diameter and sigma -! XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. ) -! XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) ) -! - ZZW(:) = MIN( ZCCS(:) , ZNAS(:,JMOD_CCN) ) - ZZX(:)= ( ZZW(:)+ZNIS(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE) -! Now : ZZX(:) = number of activable AP. -! Activated AP at this time step = activable AP - already activated AP - ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIS(:,JMOD_IMM)),0.0 ) ) -! Correction BVIE division by PTSTEP ? -! ZZY(:) = MIN( XMNU0*ZZX(:) / PTSTEP , ZRVS(:) ) - ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVS(:) ) -! -! Update the concentrations and MMR -! - ZNAS(:,JMOD_CCN) = ZNAS(:,JMOD_CCN) - ZZX(:) - ZW(:,:,:) = PNAS(:,:,:,JMOD_CCN) - PNAS(:,:,:,JMOD_CCN) = UNPACK(ZNAS(:,JMOD_CCN),MASK=GNEGT(:,:,:), & - FIELD=ZW(:,:,:)) - ZNIS(:,JMOD_IMM) = ZNIS(:,JMOD_IMM) + ZZX(:) - ZW(:,:,:) = PNIS(:,:,:,JMOD_IMM) - PNIS(:,:,:,JMOD_IMM) = UNPACK(ZNIS(:,JMOD_IMM),MASK=GNEGT(:,:,:), & - FIELD=ZW(:,:,:)) -! - ZRCS(:) = ZRCS(:) - ZZY(:) - ZRIS(:) = ZRIS(:) + ZZY(:) - ZTHS(:) = ZTHS(:) + ZZY(:)*ZLSFACT(:) !-ZLVFACT(:)) ! f(L_s*(RVHNCI)) - ZCCS(:) = ZCCS(:) - ZZX(:) - ZCIS(:) = ZCIS(:) + ZZX(:) - END IF -END DO +IF (INEGT > 0) THEN + DO JMOD_IMM = 1,NMOD_IMM ! Coated IFN modes + JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode + IF (JMOD_CCN .GT. 0) THEN + ! + ! OLD LIMA : Compute the appropriate mean diameter and sigma + ! XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. ) + ! XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) ) + ! + ZZW(:) = MIN( ZCCS(:) , ZNAS(:,JMOD_CCN) ) + ZZX(:)= ( ZZW(:)+ZNIS(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE) + ! Now : ZZX(:) = number of activable AP. + ! Activated AP at this time step = activable AP - already activated AP + ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIS(:,JMOD_IMM)),0.0 ) ) + ! Correction BVIE division by PTSTEP ? + ! ZZY(:) = MIN( XMNU0*ZZX(:) / PTSTEP , ZRVS(:) ) + ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVS(:) ) + ! + ! Update the concentrations and MMR + ! + ZNAS(:,JMOD_CCN) = ZNAS(:,JMOD_CCN) - ZZX(:) + ZW(:,:,:) = PNAS(:,:,:,JMOD_CCN) + PNAS(:,:,:,JMOD_CCN) = UNPACK(ZNAS(:,JMOD_CCN),MASK=GNEGT(:,:,:), & + FIELD=ZW(:,:,:)) + ZNIS(:,JMOD_IMM) = ZNIS(:,JMOD_IMM) + ZZX(:) + ZW(:,:,:) = PNIS(:,:,:,JMOD_IMM) + PNIS(:,:,:,JMOD_IMM) = UNPACK(ZNIS(:,JMOD_IMM),MASK=GNEGT(:,:,:), & + FIELD=ZW(:,:,:)) + ! + ZRCS(:) = ZRCS(:) - ZZY(:) + ZRIS(:) = ZRIS(:) + ZZY(:) + ZTHS(:) = ZTHS(:) + ZZY(:)*ZLSFACT(:) !-ZLVFACT(:)) ! f(L_s*(RVHNCI)) + ZCCS(:) = ZCCS(:) - ZZX(:) + ZCIS(:) = ZCIS(:) + ZZX(:) + END IF + END DO + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +END IF ! INEGT ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& - 7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HINC_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF ! @@ -563,102 +571,43 @@ END IF ! -------------------------- ! ! -! End of the heterogeneous nucleation following Phillips 08 -! Unpack variables, deallocate... -! -! -ZW(:,:,:) = PRVS(:,:,:) -PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PRCS(:,:,:) -PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PRIS(:,:,:) -PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PTHS(:,:,:) -PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PCCS(:,:,:) -PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PCIS(:,:,:) -PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -! -DEALLOCATE(ZRTMIN) -DEALLOCATE(ZCTMIN) -DEALLOCATE(ZRVT) -DEALLOCATE(ZRCT) -DEALLOCATE(ZRRT) -DEALLOCATE(ZRIT) -DEALLOCATE(ZRST) -DEALLOCATE(ZRGT) -DEALLOCATE(ZCIT) -DEALLOCATE(ZRVS) -DEALLOCATE(ZRCS) -DEALLOCATE(ZRIS) -DEALLOCATE(ZTHS) -DEALLOCATE(ZCCS) -DEALLOCATE(ZCIS) -DEALLOCATE(ZNAS) -DEALLOCATE(ZIFS) -DEALLOCATE(ZINS) -DEALLOCATE(ZNIS) -DEALLOCATE(ZRHODREF) -DEALLOCATE(ZZT) -DEALLOCATE(ZPRES) -DEALLOCATE(ZEXNREF) -DEALLOCATE(ZLSFACT) -DEALLOCATE(ZLVFACT) -DEALLOCATE(ZSI) -DEALLOCATE(ZTCELSIUS) -DEALLOCATE(ZZT_SI0_BC) -DEALLOCATE(ZLBDAC) -DEALLOCATE(ZSI0) -DEALLOCATE(Z_FRAC_ACT) -DEALLOCATE(ZSW) -DEALLOCATE(ZZW) -DEALLOCATE(ZZX) -DEALLOCATE(ZZY) -!++cb++ - DEALLOCATE(ZSI_W) -!--cb-- -! -! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'HIND_BU_RTH') - CALL BUDGET (ZW,4,'HINC_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'HIND_BU_RRV') - ENDIF - IF (LBUDGET_RC) THEN - ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'HINC_BU_RRC') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'HIND_BU_RRI') - CALL BUDGET (ZW,9,'HINC_BU_RRI') - ENDIF - IF (LBUDGET_SV) THEN -!print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV - ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV') - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV') - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') - END DO - END IF - END IF - END IF -! -! +IF (INEGT > 0) THEN + DEALLOCATE(ZRTMIN) + DEALLOCATE(ZCTMIN) + DEALLOCATE(ZRVT) + DEALLOCATE(ZRCT) + DEALLOCATE(ZRRT) + DEALLOCATE(ZRIT) + DEALLOCATE(ZRST) + DEALLOCATE(ZRGT) + DEALLOCATE(ZCIT) + DEALLOCATE(ZRVS) + DEALLOCATE(ZRCS) + DEALLOCATE(ZRIS) + DEALLOCATE(ZTHS) + DEALLOCATE(ZCCS) + DEALLOCATE(ZCIS) + DEALLOCATE(ZNAS) + DEALLOCATE(ZIFS) + DEALLOCATE(ZINS) + DEALLOCATE(ZNIS) + DEALLOCATE(ZRHODREF) + DEALLOCATE(ZZT) + DEALLOCATE(ZPRES) + DEALLOCATE(ZEXNREF) + DEALLOCATE(ZLSFACT) + DEALLOCATE(ZLVFACT) + DEALLOCATE(ZSI) + DEALLOCATE(ZTCELSIUS) + DEALLOCATE(ZZT_SI0_BC) + DEALLOCATE(ZLBDAC) + DEALLOCATE(ZSI0) + DEALLOCATE(Z_FRAC_ACT) + DEALLOCATE(ZSW) + DEALLOCATE(ZZW) + DEALLOCATE(ZZX) + DEALLOCATE(ZZY) + DEALLOCATE(ZSI_W) END IF ! INEGT > 0 ! !------------------------------------------------------------------------------- diff --git a/src/MNH/lima_precip_scavenging.f90 b/src/MNH/lima_precip_scavenging.f90 index 351ee92f0222640114445e455096dcd65234ae2b..8bfee8c9503fbab61b18ee490fae67a04ced5997 100644 --- a/src/MNH/lima_precip_scavenging.f90 +++ b/src/MNH/lima_precip_scavenging.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -11,7 +11,9 @@ INTERFACE SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & PRRT, PRHODREF, PRHODJ, PZZ, & PPABST, PTHT, PSVT, PRSVS, PINPAP ) -! + +use modd_nsv, only: nsv_lima_beg + CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! cloud paramerization INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing INTEGER, INTENT(IN) :: KTCOUNT ! iteration count @@ -25,8 +27,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t ! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Particle Concentration [kg-1] -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Particle Concentration [kg-1] +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP ! @@ -95,9 +97,10 @@ END MODULE MODI_LIMA_PRECIP_SCAVENGING !! ------------- !! Original ??/??/13 !! -!! Philippe Wautelet 28/05/2018: corrected truncated integer division (3/2 -> 1.5) +! P. Wautelet 28/05/2018: corrected truncated integer division (3/2 -> 1.5) ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! P. Wautelet 03/06/2020: bugfix: correct array starts for PSVT and PRSVS !------------------------------------------------------------------------------- ! !* 0.DECLARATIONS @@ -140,8 +143,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t ! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Particle Concentration [/m**3] -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Particle Concentration [/m**3] +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP ! diff --git a/src/MNH/lima_warm.f90 b/src/MNH/lima_warm.f90 index d982cbe4fdc52b4c6d2de105836a2ad6fcf66937..fc47a31148a1f02ce7611ad5661f1b5a1f345b2d 100644 --- a/src/MNH/lima_warm.f90 +++ b/src/MNH/lima_warm.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -17,6 +17,7 @@ INTERFACE PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) ! USE MODD_IO, ONLY: TFILEDATA +USE MODD_NSV, only: NSV_LIMA_BEG ! LOGICAL, INTENT(IN) :: OACTIT ! Switch to activate the ! activation by radiative @@ -51,11 +52,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCM ! Cloud water m.r. at t-dt ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! ! ! @@ -126,9 +127,10 @@ END MODULE MODI_LIMA_WARM !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets !! J. Escobar : for real*4 , use XMNH_HUGE -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! B.Vié 03/02/2020 : correction of activation of water deposition on the ground -!! B.Vié 03/03/2020 : use DTHRAD instead of dT/dt in Smax diagnostic computation +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! B. Vié 03/02/2020: correction of activation of water deposition on the ground +! B. Vié 03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation +! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -189,11 +191,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCM ! Cloud water m.r. at t-dt ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Concentrations at time t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! ! ! diff --git a/src/MNH/lima_warm_coal.f90 b/src/MNH/lima_warm_coal.f90 index aaae2a04be021958b9d559584d07004c012c40ea..0986129261f97bd8bc2fe9f507d5cb2542478145 100644 --- a/src/MNH/lima_warm_coal.f90 +++ b/src/MNH/lima_warm_coal.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-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. @@ -95,8 +95,9 @@ END MODULE MODI_LIMA_WARM_COAL !! ------------- !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! B. Vie 03/2020: correction of budgets parallelization ! !------------------------------------------------------------------------------- ! @@ -239,6 +240,7 @@ IF( IMICRO >= 1 ) THEN ALLOCATE(ZZW1(IMICRO)) ALLOCATE(ZZW2(IMICRO)) ALLOCATE(ZZW3(IMICRO)) +END IF ! IMICRO ! ! !------------------------------------------------------------------------------- @@ -249,20 +251,21 @@ IF (LRAIN) THEN ! ------------------------------------ ! ! - GSELF(:) = ZCCT(:)>XCTMIN(2) - ISELF = COUNT(GSELF(:)) - IF( ISELF>0 ) THEN - ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration - WHERE( GSELF(:) ) - ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) ) - END WHERE + IF( IMICRO >= 1 ) THEN + GSELF(:) = ZCCT(:)>XCTMIN(2) + ISELF = COUNT(GSELF(:)) + IF( ISELF>0 ) THEN + ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration + WHERE( GSELF(:) ) + ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) ) + END WHERE + END IF + ! + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) END IF -! -! - ZW(:,:,:) = PCCS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))& - &*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') + ! + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -273,44 +276,42 @@ IF (LRAIN) THEN ! ! ! - ZZW2(:) = 0.0 - ZZW1(:) = 0.0 - WHERE( ZRCT(:)>XRTMIN(2) ) - ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)* & - (XAUTO1/min(ZLBDC(:),1.e9)**4-XLAUTR_THRESHOLD) ) ! L -! - ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)* & - (XAUTO2/ZLBDC(:)-XITAUTR_THRESHOLD) ) ) ! L/tau -! - ZRCS(:) = ZRCS(:) - ZZW3(:) - ZRRS(:) = ZRRS(:) + ZZW3(:) -! - ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3), & - ZLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for - ! switching the autoconversion regimes - ! min (80 microns, D_h, D_r) - ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC - ZCRS(:) = ZCRS(:) + ZZW3(:) - END WHERE -! -! - ZW(:,:,:) = PRCS(:,:,:) - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - - ZW(:,:,:) = PRRS(:,:,:) - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - ZW(:,:,:) = PCRS(:,:,:) - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCRS(:,:,:) - CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') + IF( IMICRO >= 1 ) THEN + ZZW2(:) = 0.0 + ZZW1(:) = 0.0 + WHERE( ZRCT(:)>XRTMIN(2) ) + ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)* & + (XAUTO1/min(ZLBDC(:),1.e9)**4-XLAUTR_THRESHOLD) ) ! L + ! + ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)* & + (XAUTO2/ZLBDC(:)-XITAUTR_THRESHOLD) ) ) ! L/tau + ! + ZRCS(:) = ZRCS(:) - ZZW3(:) + ZRRS(:) = ZRRS(:) + ZZW3(:) + ! + ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3), & + ZLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for + ! switching the autoconversion regimes + ! min (80 microns, D_h, D_r) + ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC + ZCRS(:) = ZCRS(:) + ZZW3(:) + END WHERE + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRRS(:,:,:) + PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) ZW(:,:,:) = PCCS(:,:,:) - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF + ! + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') END IF ! ! @@ -321,58 +322,57 @@ IF (LRAIN) THEN ! -------------------- ! ! - GACCR(:) = ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3) - IACCR = COUNT(GACCR(:)) - IF( IACCR>0 ) THEN - ALLOCATE(ZZW4(IMICRO)); ZZW4(:) = XACCR1/ZLBDR(:) - ALLOCATE(GENABLE_ACCR_SCBU(IMICRO)) - GENABLE_ACCR_SCBU(:) = ZRRT(:)>1.2*ZZW2(:)/ZRHODREF(:) .OR. & - ZZW4(:)>=MAX( XACCR2,XACCR3/(XACCR4/ZLBDC(:)-XACCR5) ) - GACCR(:) = GACCR(:) .AND. ZRCT(:)>XRTMIN(2) .AND. ZCCT(:)>XCTMIN(2) .AND. GENABLE_ACCR_SCBU(:) - END IF -! - IACCR = COUNT(GACCR(:)) - IF( IACCR>0 ) THEN - WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m - ZZW3(:) = ZLBDC3(:) / ZLBDR3(:) - ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) ) - ZCCS(:) = ZCCS(:) - ZZW2(:) -! - ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) ) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) ) - ZRCS(:) = ZRCS(:) - ZZW2(:) - ZRRS(:) = ZRRS(:) + ZZW2(:) - END WHERE - WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m - ZZW3(:) = MIN(ZLBDC3(:) / ZLBDR3(:), 1.E8) - ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) - ZZW1(:) = ZZW1(:) / ZLBDC3(:) - ZZW3(:) = ZZW3(:)**2 - ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) ) - ZCCS(:) = ZCCS(:) - ZZW2(:) -! - ZZW1(:) = ZZW1(:) / ZLBDC3(:) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:)) & - ,ZRCS(:) ) - ZRCS(:) = ZRCS(:) - ZZW2(:) - ZRRS(:) = ZRRS(:) + ZZW2(:) - END WHERE + IF( IMICRO >= 1 ) THEN + GACCR(:) = ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3) + IACCR = COUNT(GACCR(:)) + IF( IACCR>0 ) THEN + ALLOCATE(ZZW4(IMICRO)); ZZW4(:) = XACCR1/ZLBDR(:) + ALLOCATE(GENABLE_ACCR_SCBU(IMICRO)) + GENABLE_ACCR_SCBU(:) = ZRRT(:)>1.2*ZZW2(:)/ZRHODREF(:) .OR. & + ZZW4(:)>=MAX( XACCR2,XACCR3/(XACCR4/ZLBDC(:)-XACCR5) ) + GACCR(:) = GACCR(:) .AND. ZRCT(:)>XRTMIN(2) .AND. ZCCT(:)>XCTMIN(2) .AND. GENABLE_ACCR_SCBU(:) + END IF + ! + IACCR = COUNT(GACCR(:)) + IF( IACCR>0 ) THEN + WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m + ZZW3(:) = ZLBDC3(:) / ZLBDR3(:) + ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) ) + ZCCS(:) = ZCCS(:) - ZZW2(:) + ! + ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) ) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) ) + ZRCS(:) = ZRCS(:) - ZZW2(:) + ZRRS(:) = ZRRS(:) + ZZW2(:) + END WHERE + WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m + ZZW3(:) = MIN(ZLBDC3(:) / ZLBDR3(:), 1.E8) + ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) + ZZW1(:) = ZZW1(:) / ZLBDC3(:) + ZZW3(:) = ZZW3(:)**2 + ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) ) + ZCCS(:) = ZCCS(:) - ZZW2(:) + ! + ZZW1(:) = ZZW1(:) / ZLBDC3(:) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:)) & + ,ZRCS(:) ) + ZRCS(:) = ZRCS(:) - ZZW2(:) + ZRRS(:) = ZRRS(:) + ZZW2(:) + END WHERE + END IF + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRRS(:,:,:) + PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) END IF ! -! - ZW(:,:,:) = PRCS(:,:,:) - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - ZW(:,:,:) = PRRS(:,:,:) - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') - ZW(:,:,:) = PCCS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -382,48 +382,49 @@ IF (LRAIN) THEN ! ----------------------------------------- ! ! - IF( IACCR>0 ) THEN - GSCBU(:) = ZCRT(:)>XCTMIN(3) .AND. GENABLE_ACCR_SCBU(:) - ISCBU = COUNT(GSCBU(:)) - ELSE - ISCBU = 0.0 - END IF - IF( ISCBU>0 ) THEN -! -!* 5.1 efficiencies -! - IF (.NOT.ALLOCATED(ZZW4)) ALLOCATE(ZZW4(IMICRO)) - ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean diameter - ALLOCATE(ZSCBU(IMICRO)) - ZSCBU(:) = 1.0 - WHERE (ZZW4(:)>=XSCBU_EFF1 .AND. GSCBU(:)) ZSCBU(:) = & ! Coalescence - EXP(XSCBUEXP1*(ZZW4(:)-XSCBU_EFF1)) ! efficiency - WHERE (ZZW4(:)>=XSCBU_EFF2) ZSCBU(:) = 0.0 ! Break-up -! -!* 5.2 integration -! - ZZW1(:) = 0.0 - ZZW2(:) = 0.0 - ZZW3(:) = 0.0 - ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean volume drop diameter - WHERE (GSCBU(:).AND.(ZZW4(:)>1.E-4)) ! analytical integration - ZZW1(:) = XSCBU2 * ZCRT(:)**2 / ZLBDR3(:) ! D>100 10-6 m - ZZW3(:) = ZZW1(:)*ZSCBU(:) - END WHERE - WHERE (GSCBU(:).AND.(ZZW4(:)<=1.E-4)) - ZZW2(:) = XSCBU3 *(ZCRT(:) / ZLBDR3(:))**2 ! D<100 10-6 m - ZZW3(:) = ZZW2(:) - END WHERE - ZCRS(:) = ZCRS(:) - MIN( ZCRS(:),ZZW3(:) * ZRHODREF(:) ) - DEALLOCATE(ZSCBU) + IF( IMICRO >= 1 ) THEN + IF( IACCR>0 ) THEN + GSCBU(:) = ZCRT(:)>XCTMIN(3) .AND. GENABLE_ACCR_SCBU(:) + ISCBU = COUNT(GSCBU(:)) + ELSE + ISCBU = 0.0 + END IF + IF( ISCBU>0 ) THEN + ! + !* 5.1 efficiencies + ! + IF (.NOT.ALLOCATED(ZZW4)) ALLOCATE(ZZW4(IMICRO)) + ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean diameter + ALLOCATE(ZSCBU(IMICRO)) + ZSCBU(:) = 1.0 + WHERE (ZZW4(:)>=XSCBU_EFF1 .AND. GSCBU(:)) ZSCBU(:) = & ! Coalescence + EXP(XSCBUEXP1*(ZZW4(:)-XSCBU_EFF1)) ! efficiency + WHERE (ZZW4(:)>=XSCBU_EFF2) ZSCBU(:) = 0.0 ! Break-up + ! + !* 5.2 integration + ! + ZZW1(:) = 0.0 + ZZW2(:) = 0.0 + ZZW3(:) = 0.0 + ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean volume drop diameter + WHERE (GSCBU(:).AND.(ZZW4(:)>1.E-4)) ! analytical integration + ZZW1(:) = XSCBU2 * ZCRT(:)**2 / ZLBDR3(:) ! D>100 10-6 m + ZZW3(:) = ZZW1(:)*ZSCBU(:) + END WHERE + WHERE (GSCBU(:).AND.(ZZW4(:)<=1.E-4)) + ZZW2(:) = XSCBU3 *(ZCRT(:) / ZLBDR3(:))**2 ! D<100 10-6 m + ZZW3(:) = ZZW2(:) + END WHERE + ZCRS(:) = ZCRS(:) - MIN( ZCRS(:),ZZW3(:) * ZRHODREF(:) ) + DEALLOCATE(ZSCBU) + END IF + ! + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) END IF -! -! - ZW(:,:,:) = PCRS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') -! + ! + IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') + ! END IF ! LRAIN ! ! @@ -434,15 +435,7 @@ END IF ! LRAIN ! ------------------- ! ! - ZW(:,:,:) = PRCS(:,:,:) - PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRRS(:,:,:) - PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCCS(:,:,:) - PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCRS(:,:,:) - PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! +IF( IMICRO >= 1 ) THEN DEALLOCATE(ZRCT) DEALLOCATE(ZRRT) DEALLOCATE(ZCCT) @@ -464,28 +457,6 @@ END IF ! LRAIN DEALLOCATE(ZLBDC3) DEALLOCATE(ZLBDR) DEALLOCATE(ZLBDC) -! -! -!------------------------------------------------------------------------------- -! -ELSE -!* 7. Budgets are forwarded -! ------------------------ -! -! - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') -! - IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') -! - IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') -! - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') - END IF ! IMICRO ! !------------------------------------------------------------------------------- diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90 index c39a3436d7a650e609d81ab92ee5980d08bbd581..6d0fe284b5547afc95e41824b4048567acbbcb7f 100644 --- a/src/MNH/modd_budget.f90 +++ b/src/MNH/modd_budget.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-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. +!----------------------------------------------------------------- ! ################## MODULE MODD_BUDGET ! ################## @@ -41,8 +42,9 @@ !! C. Barthe /16 add budget terms for LIMA !! C. LAc 10/2016 add droplets deposition !! S. Riette 11/2016 New budgets for ICE3/ICE4 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! B.Vie 03/02/2020 : LIMA negativity checks after turbulence, advection and microphysics budgets +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! B. Vié 03/02/2020: LIMA negativity checks after turbulence, advection and microphysics budgets +! P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -576,7 +578,10 @@ INTEGER, SAVE :: NHTURBSV ! horizontal turbulence INTEGER, SAVE :: NVTURBSV ! vertical turbulence INTEGER, SAVE :: NCHEMSV ! chemistry activity ! -INTEGER, SAVE :: NNEGASV +INTEGER, SAVE :: NNEGASV ! negative correction +INTEGER, SAVE :: NNETURSV ! negative correction +INTEGER, SAVE :: NNEADVSV ! negative correction +INTEGER, SAVE :: NNECONSV ! negative correction ! ! Allowed processes for the budget of electric charge carried by water vapor INTEGER, SAVE :: NDEPSQV diff --git a/src/MNH/modn_budget.f90 b/src/MNH/modn_budget.f90 index 2e0f1f4ec6433fd184ddcb835902edc3aebb13cc..257e023032c00b2e1bf54986b3845ff225422455 100644 --- a/src/MNH/modn_budget.f90 +++ b/src/MNH/modn_budget.f90 @@ -225,7 +225,8 @@ !! C. Barthe /16 add budget terms for LIMA !! C.Lac 10/2016 Add droplet deposition !! S. Riette 11/2016 New budgets for ICE3/ICE4 -!! B.Vie 03/02/2020 LIMA negativity checks after turbulence, advection and microphysics budgets +! B. Vié 03/02/2020: LIMA negativity checks after turbulence, advection and microphysics budgets +! P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -305,7 +306,7 @@ NAMELIST/NAM_BU_RRH/LBU_RRH, NASSERH, NNESTRH, NADVRH, NFRCRH, & ! NAMELIST/NAM_BU_RSV/ LBU_RSV, NASSESV, NNESTSV, NADVSV, NFRCSV, & NDIFSV, NRELSV, NDCONVSV, NVTURBSV, NHTURBSV, NCHEMSV, NMAFLSV, & - NNEGASV, & + NNEGASV, NNETURSV, NNEADVSV, NNECONSV, & NDEPSQV, NDEPGQV, NREVAQV, NCDEPIQV, NNEUTQV, & NAUTOQC, NACCRQC, NRIMQC, NWETGQC, NDRYGQC, NIMLTQC, NBERFIQC, & NCDEPIQC, NSEDIQC, NNEUTQC, & diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90 index 8f922a418ec4e95d2703056d878e542c90953261..176fe1bc526c8a75cc81b5c5a010a9bd07db1f53 100644 --- a/src/MNH/one_wayn.f90 +++ b/src/MNH/one_wayn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-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. @@ -117,9 +117,10 @@ SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT, & !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 !! Modification 01/2016 (JP Pinty) Add LIMA -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 03/05/2019: restructuration of one_wayn and ini_one_wayn +! P. Wautelet 04/06/2020: correct call to Set_conc_lima + initialize ZCONCT !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -145,12 +146,12 @@ use mode_ll, only: GET_CHILD_DIM_ll, GO_TOMODEL_ll, LS_FORCING_ll, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll, & SET_LSFIELD_1WAY_ll, UNSET_LSFIELD_1WAY_ll USE MODE_MODELN_HANDLER, only: GOTO_MODEL +use mode_set_conc_lima use mode_sum_ll, only: SUM3D_ll use mode_tools_ll, only: GET_DIM_EXT_ll ! USE MODI_SET_CHEMAQ_1WAY USE MODI_SET_CONC_ICE_C1R3 -USE MODI_SET_CONC_LIMA USE MODI_SET_CONC_RAIN_C2R2 ! IMPLICIT NONE @@ -421,12 +422,13 @@ ENDIF IF (HCLOUD=="LIMA" ) THEN IF (CCLOUD/="LIMA") THEN ALLOCATE(ZCONCT(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),NSV_LIMA_A(KMI))) + ZCONCT(:, :, :, :) = 0. IF (CCLOUD == "REVE") THEN ZINIT_TYPE = "INI1" ELSE ZINIT_TYPE = "NONE" END IF - CALL SET_CONC_LIMA (ZINIT_TYPE,XRHODREF,XRT,ZCONCT) + CALL SET_CONC_LIMA (KMI,ZINIT_TYPE,XRHODREF,XRT,ZCONCT) DO JSV=1,NSV_LIMA_A(KMI) CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),& &ZTSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI) diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index 968991a463cf75f0d7e4f591c4c04bd419133cb5..030716ac977d58321ffc122cb863b6baa4eea661 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -133,6 +133,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! Q. Rodier 16/09/2019: switch of GRIB number ID for orography in ARPEGE/AROME in EPyGrAM ! Q. Rodier 27/01/2020: switch of GRIB number ID for orography and hydrometeors in ARPEGE/AROME in EPyGrAM v1.3.7 +! Q. Rodier 21/04/2020: correction GFS u and v wind component written in the right vertical order !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -1425,7 +1426,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1 IF (IMODEL/=10) THEN ! others than NCEP ILEV1 = JLOOP1 ELSE - ILEV1 = IP_GFS(JLOOP1) + ILEV1 = IP_GFS(INLEVEL+ISTARTLEVEL-JLOOP1) END IF ! read component u CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1) @@ -1457,7 +1458,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1 IF (IMODEL/=10) THEN ! others than NCEP ILEV1 = JLOOP1 ELSE - ILEV1 = IP_GFS(JLOOP1) + ILEV1 = IP_GFS(INLEVEL+ISTARTLEVEL-JLOOP1) END IF CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR+1,KLEV1=ILEV1) IF (INUM < 0) THEN diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index a6523b5d5916d74be0ba7dc13a90343ac83cae1e..9a4ea83557c02dcfc0f5305a20f0a1f85fcf52e7 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -240,6 +240,7 @@ END MODULE MODI_READ_FIELD ! P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments (bugfix: PPABSM was intent(OUT)) !! 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 +!! M. Leriche 10/06/2019: in restart case read all immersion modes for LIMA !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -714,11 +715,12 @@ DO JSV = NSV_LIMA_BEG,NSV_LIMA_END TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' END IF ! N IMM nucl - I = 0 IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN - I = I + 1 - WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) - TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + DO I= 1, NMOD_IMM ! to be supressed + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) ! to be supressed +! WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_BEG - NSV_LIMA_IMM_NUCL + 1)) + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + ENDDO END IF ! Hom. freez. of CCN IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN @@ -796,7 +798,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1) = UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)) SELECT CASE(HGETSVT(JSV)) CASE ('READ') - TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'M' + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)' CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) @@ -1665,3 +1667,4 @@ END IF ! ! END SUBROUTINE READ_FIELD + diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 86d118faeb19d98f846ff3c149830ed9ee55d012..4aebcdb849ba9534050bec97b7a9ceadca2e0992 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -270,6 +270,12 @@ END MODULE MODI_RESOLVED_CLOUD !! P. Wautelet 24/02/2020: bugfix: corrected budget name (DEPI->CDEPI) for ice_adjust !! 03/2020 (B.Vie) : LIMA negativity checks after turbulence, advection and microphysics budgets !! B.Vié 03/03/2020 : use DTHRAD instead of dT/dt in Smax diagnostic computation +! P. Wautelet 11/06/2020: bugfix: correct ZSVS array indices +! P. Wautelet 11/06/2020: bugfix: add "Non local correction for precipitating species" for ICE4 +! P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets +! P. Wautelet 23/06/2020: remove ZSVS and ZSVT to improve code readability +! P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct +! P. Wautelet 30/06/2020: remove non-local corrections !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -293,6 +299,7 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN USE MODD_SALT, ONLY: LSALT ! USE MODE_ll +use mode_sources_neg_correct, only: Sources_neg_correct ! USE MODI_BUDGET USE MODI_C2R2_ADJUST @@ -456,8 +463,6 @@ REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR INTEGER :: ISVBEG ! first scalar index for microphysics INTEGER :: ISVEND ! last scalar index for microphysics REAL, DIMENSION(:), ALLOCATABLE :: ZRSMIN ! Minimum value for tendencies -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT ! scalar variable for microphysics only -REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVS ! scalar tendency for microphysics only LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limit computation REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3), KRR) :: ZFPR ! @@ -492,15 +497,9 @@ ELSE IF (HCLOUD == 'LIMA') THEN ISVEND = NSV_LIMA_END ELSE ISVBEG = 0 - ISVEND = 0 + ISVEND = -1 END IF ! -IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN - ALLOCATE(ZSVT(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),ISVEND - ISVBEG + 1)) - ALLOCATE(ZSVS(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),ISVEND - ISVBEG + 1)) - ZSVT(:,:,:,:) = PSVT(:,:,:,ISVBEG:ISVEND) - ZSVS(:,:,:,:) = PSVS(:,:,:,ISVBEG:ISVEND) -END IF IF (HCLOUD(1:3)=='ICE' .AND. LRED) THEN ALLOCATE(ZRSMIN(SIZE(XRTMIN))) ZRSMIN(:) = XRTMIN(:) / PTSTEP @@ -515,8 +514,8 @@ DO JRR = 1,KRR END DO ! IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN - DO JSV = 1,SIZE(ZSVS,4) - ZSVS(:,:,:,JSV) = ZSVS(:,:,:,JSV) / PRHODJ(:,:,:) + DO JSV = ISVBEG, ISVEND + PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) / PRHODJ(:,:,:) ENDDO ENDIF ! @@ -543,18 +542,18 @@ IF(GNORTH .AND. HLBCY(2) /= 'CYCL') PRT(:,IJE+1:,:,2:) = 0.0 ! IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN DO JI=1,JPHEXT - ZSVS(JI,:,:,:) = ZSVS(IIB,:,:,:) - ZSVS(IIE+JI,:,:,:) = ZSVS(IIE,:,:,:) - ZSVS(:,JI,:,:) = ZSVS(:,IJB,:,:) - ZSVS(:,IJE+JI,:,:) = ZSVS(:,IJE,:,:) + PSVS(JI, :, :, ISVBEG:ISVEND) = PSVS(IIB, :, :, ISVBEG:ISVEND) + PSVS(IIE+JI, :, :, ISVBEG:ISVEND) = PSVS(IIE, :, :, ISVBEG:ISVEND) + PSVS(:, JI, :, ISVBEG:ISVEND) = PSVS(:, IJB, :, ISVBEG:ISVEND) + PSVS(:, IJE+JI, :, ISVBEG:ISVEND) = PSVS(:, IJE, :, ISVBEG:ISVEND) END DO ! ! complete the physical boundaries to avoid some computations ! - IF(GWEST .AND. HLBCX(1) /= 'CYCL') ZSVT(:IIB-1,:,:,:) = 0.0 - IF(GEAST .AND. HLBCX(2) /= 'CYCL') ZSVT(IIE+1:,:,:,:) = 0.0 - IF(GSOUTH .AND. HLBCY(1) /= 'CYCL') ZSVT(:,:IJB-1,:,:) = 0.0 - IF(GNORTH .AND. HLBCY(2) /= 'CYCL') ZSVT(:,IJE+1:,:,:) = 0.0 + IF(GWEST .AND. HLBCX(1) /= 'CYCL') PSVT(:IIB-1, :, :, ISVBEG:ISVEND) = 0.0 + IF(GEAST .AND. HLBCX(2) /= 'CYCL') PSVT(IIE+1:, :, :, ISVBEG:ISVEND) = 0.0 + IF(GSOUTH .AND. HLBCY(1) /= 'CYCL') PSVT(:, :IJB-1, :, ISVBEG:ISVEND) = 0.0 + IF(GNORTH .AND. HLBCY(2) /= 'CYCL') PSVT(:, IJE+1:, :, ISVBEG:ISVEND) = 0.0 ENDIF ! ! complete the vertical boundaries @@ -570,229 +569,55 @@ PRT(:,:,IKE+1,:) = PRT(:,:,IKE,:) ! IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO' & .OR. HCLOUD == 'LIMA') THEN - ZSVS(:,:,IKB-1,:) = ZSVS(:,:,IKB,:) - ZSVS(:,:,IKE+1,:) = ZSVS(:,:,IKE,:) - ZSVT(:,:,IKB-1,:) = ZSVT(:,:,IKB,:) - ZSVT(:,:,IKE+1,:) = ZSVT(:,:,IKE,:) + PSVS(:,:,IKB-1,ISVBEG:ISVEND) = PSVS(:,:,IKB,ISVBEG:ISVEND) + PSVS(:,:,IKE+1,ISVBEG:ISVEND) = PSVS(:,:,IKE,ISVBEG:ISVEND) + PSVT(:,:,IKB-1,ISVBEG:ISVEND) = PSVT(:,:,IKB,ISVBEG:ISVEND) + PSVT(:,:,IKE+1,ISVBEG:ISVEND) = PSVT(:,:,IKE,ISVBEG:ISVEND) ENDIF ! -! personal comment: tranfering these variables to the -! microphysical routines would save -! computing time -! -ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) -ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:) -ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) -ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) -ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) -! -! !* 3. REMOVE NEGATIVE VALUES ! ---------------------- ! !* 3.1 Non local correction for precipitating species (Rood 87) ! -IF (HCLOUD == 'KESS' .OR. HCLOUD == 'ICE3' & - .OR. HCLOUD == 'C2R2' .OR. & - HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO' .OR. HCLOUD=='LIMA' ) THEN -! - DO JRR = 3,KRR - SELECT CASE (JRR) - CASE(3,5,6,7) ! rain, snow, graupel and hail - - IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll) < 0.0 ) THEN -! -! compute the total water mass computation -! - ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) -! -! remove the negative values -! - PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) ) -! -! compute the new total mass -! - ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) -! -! correct again in such a way to conserve the total mass -! - ZRATIO = ZMASSTOT / ZMASSPOS - PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO -! - END IF - END SELECT - END DO -END IF +! IF ( HCLOUD == 'KESS' & +! .OR. HCLOUD == 'ICE3' .OR. HCLOUD == 'ICE4' & +! .OR. HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' & +! .OR. HCLOUD == 'KHKO' .OR. HCLOUD == 'LIMA' ) THEN +! ! +! DO JRR = 3,KRR +! SELECT CASE (JRR) +! CASE(3,5,6,7) ! rain, snow, graupel and hail +! +! IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll) < 0.0 ) THEN +! ! +! ! compute the total water mass computation +! ! +! ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) +! ! +! ! remove the negative values +! ! +! PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) ) +! ! +! ! compute the new total mass +! ! +! ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) +! ! +! ! correct again in such a way to conserve the total mass +! ! +! ZRATIO = ZMASSTOT / ZMASSPOS +! PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO +! ! +! END IF +! END SELECT +! END DO +! END IF ! !* 3.2 Adjustement for liquid and solid cloud ! -SELECT CASE ( HCLOUD ) - CASE('KESS') - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0.0 - END WHERE -! -! -! CASE('C2R2','KHKO') -! CALL GET_HALO(PRS(:,:,:,2)) -! CALL GET_HALO(ZSVS(:,:,:,2)) -! WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.) -! ZSVS(:,:,:,1) = 0.0 -! END WHERE -! DO JSV = 2, 3 -! WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.) -! PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV) -! PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) / & -! ZCPH(:,:,:) / ZEXN(:,:,:) -! PRS(:,:,:,JSV) = 0.0 -! ZSVS(:,:,:,JSV) = 0.0 -! END WHERE -! ENDDO -! Commented 03/2013 O.Thouron -! (at least necessary to be commented for supersaturation variable) -! ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) -! -! - CASE('ICE3','ICE4') - WHERE (PRS(:,:,:,4) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = 0. - END WHERE -! -! cloud - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0. - END WHERE -! -! if rc or ri are positive, we can correct negative rv -! cloud - WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) ) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0. - END WHERE -! ice - IF(KRR > 3) THEN - WHERE ((PRS(:,:,:,1) < 0.).AND.(PRS(:,:,:,4) > 0.)) - ZCOR(:,:,:)=MIN(-PRS(:,:,:,1),PRS(:,:,:,4)) - PRS(:,:,:,1) = PRS(:,:,:,1) + ZCOR(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:) - END WHERE - END IF -! - CASE('C3R5') - WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.) - ZSVS(:,:,:,1) = 0.0 - END WHERE - DO JSV = 2, 3 - WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,JSV) = 0.0 - ZSVS(:,:,:,JSV) = 0.0 - END WHERE - ENDDO - ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) -! ice - WHERE (PRS(:,:,:,4) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = 0.0 - PSVS(:,:,:,4) = 0.0 - END WHERE -! cloud - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0.0 - PSVS(:,:,:,2) = 0.0 - END WHERE - PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) ) -! - CASE('LIMA') -! Correction where rc<0 or Nc<0 - IF (OWARM) THEN - WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRS(:,:,:,2) = 0.0 - ZSVS(:,:,:,NSV_LIMA_NC) = 0.0 - END WHERE - END IF -! Correction where rr<0 or Nr<0 - IF (OWARM .AND. ORAIN) THEN - WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRS(:,:,:,3) = 0.0 - ZSVS(:,:,:,NSV_LIMA_NR) = 0.0 - END WHERE - END IF -! Correction where ri<0 or Ni<0 - IF (LCOLD) THEN - WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRS(:,:,:,4) = 0.0 - ZSVS(:,:,:,NSV_LIMA_NI) = 0.0 - END WHERE - END IF -! - ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) - PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) ) -! -END SELECT -! +! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets +call Sources_neg_correct( hcloud, 'NEGA', krr, ptstep, ppabst, ptht, prt, pths, prs, psvs, prhodj ) ! -!* 3.3 STORE THE BUDGET TERMS -! ---------------------- -! -IF ((HCLOUD /= 'KHKO') .AND. (HCLOUD /= 'C2R2') ) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC') -END IF -IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') -IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN - IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV') - IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV') - IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV') - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & - PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') - END DO - END IF - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & - PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') - END DO - END IF -END IF -! - !* 3.4 Limitations of Na and Nc to the CCN max number concentration ! ! Commented by O.Thouron 03/2013 @@ -862,8 +687,9 @@ SELECT CASE ( HCLOUD ) PPABST, PTHT, PRT(:,:,:,1), PRT(:,:,:,2), PRT(:,:,:,3), & PTHM, PRCM, PPABSM, & PW_ACT,PDTHRAD,PTHS, PRS(:,:,:,1),PRS(:,:,:,2),PRS(:,:,:,3), & - ZSVT(:,:,:,1), ZSVT(:,:,:,2), ZSVT(:,:,:,3), & - ZSVS(:,:,:,1), ZSVS(:,:,:,2), ZSVS(:,:,:,3), & + PSVT(:,:,:,NSV_C2R2BEG), PSVT(:,:,:,NSV_C2R2BEG+1), & + PSVT(:,:,:,NSV_C2R2BEG+2), PSVS(:,:,:,NSV_C2R2BEG), & + PSVS(:,:,:,NSV_C2R2BEG+1), PSVS(:,:,:,NSV_C2R2BEG+2), & PINPRC, PINPRR, PINPRR3D, PEVAP3D , & PSVT(:,:,:,:), PSOLORG, PMI, HACTCCN, & PINDEP, PSUPSAT, PNACT ) @@ -876,16 +702,17 @@ SELECT CASE ( HCLOUD ) PTSTEP, PRHODJ, PPABSM, PPABST, PRHODREF, PZZ, & PTHT,PRT(:,:,:,1),PRT(:,:,:,2),PRT(:,:,:,3), & PTHS,PRS(:,:,:,1),PRS(:,:,:,2),PRS(:,:,:,3), & - ZSVS(:,:,:,2),ZSVS(:,:,:,1), & - ZSVS(:,:,:,4), PCLDFR, PSRCS , PNPRO,PSSPRO ) + PSVS(:,:,:,NSV_C2R2BEG+1), PSVS(:,:,:,NSV_C2R2BEG), & + PSVS(:,:,:,NSV_C2R2BEG+3), PCLDFR, PSRCS, PNPRO, PSSPRO ) ! ELSE - CALL C2R2_ADJUST ( KRR,TPFILE, HRAD, & - HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP, & - PRHODJ, PSIGS, PPABST, & - PTHS=PTHS, PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & - PCNUCS=ZSVS(:,:,:,1), PCCS=ZSVS(:,:,:,2), & - PSRCS=PSRCS, PCLDFR=PCLDFR, PRRS=PRS(:,:,:,3) ) + CALL C2R2_ADJUST ( KRR,TPFILE, HRAD, & + HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP, & + PRHODJ, PSIGS, PPABST, & + PTHS=PTHS, PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & + PCNUCS=PSVS(:,:,:,NSV_C2R2BEG), & + PCCS=PSVS(:,:,:,NSV_C2R2BEG+1), & + PSRCS=PSRCS, PCLDFR=PCLDFR, PRRS=PRS(:,:,:,3) ) ! END IF ! @@ -1073,34 +900,35 @@ SELECT CASE ( HCLOUD ) PRHODREF, PEXNREF, ZDZZ, & PRHODJ, PPABSM, PPABST, & NMOD_CCN, NMOD_IFN, NMOD_IMM, & - PDTHRAD, PTHT, PRT, ZSVT, PW_ACT, & - PTHS, PRS, ZSVS, & + PDTHRAD, PTHT, PRT, & + PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT, & + PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, & - PEVAP3D ) + PEVAP3D ) ELSE - IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & - TPFILE, OCLOSE_OUT, KRR, PZZ, PRHODJ, & - PRHODREF, PEXNREF, PW_ACT, PPABSM, PPABST, & - PDTHRAD, PRCM, & - PTHT, PRT, ZSVT, & - PTHS, PRS, ZSVS, & - PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) + IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & + TPFILE, OCLOSE_OUT, KRR, PZZ, PRHODJ, & + PRHODREF, PEXNREF, PW_ACT, PPABSM, PPABST, & + PDTHRAD, PRCM, & + PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) ! IF (LCOLD) CALL LIMA_COLD(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & KRR, PZZ, PRHODJ, & PRHODREF, PEXNREF, PPABST, PW_ACT, & PTHM, PPABSM, & - PTHT, PRT, ZSVT, & - PTHS, PRS, ZSVS, & - PINPRS, PINPRG, PINPRH) -! - IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & - KRR, PZZ, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PW_ACT, & - PTHM, PPABSM, & - PTHT, PRT, ZSVT, & - PTHS, PRS, ZSVS ) + PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PINPRS, PINPRG, PINPRH ) +! + IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & + KRR, PZZ, PRHODJ, & + PRHODREF, PEXNREF, PPABST, PW_ACT, & + PTHM, PPABSM, & + PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) ) ENDIF ! !* 12.2 Perform the saturation adjustment @@ -1108,7 +936,8 @@ SELECT CASE ( HCLOUD ) CALL LIMA_ADJUST(KRR, KMI, TPFILE, HRAD, & HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP, & PRHODREF, PRHODJ, PEXNREF, PPABST, PSIGS, PPABST, & - PRT, PRS, ZSVT, ZSVS, & + PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PTHS, PSRCS, PCLDFR ) ! END SELECT @@ -1137,185 +966,10 @@ IF(HCLOUD=='ICE3' .OR. HCLOUD=='ICE4' ) THEN ENDWHERE ENDIF ENDIF -! -! -SELECT CASE ( HCLOUD ) - CASE('KESS') - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0.0 - END WHERE -! -! -! CASE('C2R2','KHKO') -! CALL GET_HALO(PRS(:,:,:,2)) -! CALL GET_HALO(ZSVS(:,:,:,2)) -! WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.) -! ZSVS(:,:,:,1) = 0.0 -! END WHERE -! DO JSV = 2, 3 -! WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.) -! PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV) -! PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) / & -! ZCPH(:,:,:) / ZEXN(:,:,:) -! PRS(:,:,:,JSV) = 0.0 -! ZSVS(:,:,:,JSV) = 0.0 -! END WHERE -! ENDDO -! Commented 03/2013 O.Thouron -! (at least necessary to be commented for supersaturation variable) -! ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) -! -! - CASE('ICE3','ICE4') - WHERE (PRS(:,:,:,4) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = 0. - END WHERE -! -! cloud - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0. - END WHERE -! -! if rc or ri are positive, we can correct negative rv -! cloud - WHERE ((PRS(:,:,:,1) <0.) .AND. (PRS(:,:,:,2)> 0.) ) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0. - END WHERE -! ice - IF(KRR > 3) THEN - WHERE ((PRS(:,:,:,1) < 0.).AND.(PRS(:,:,:,4) > 0.)) - ZCOR(:,:,:)=MIN(-PRS(:,:,:,1),PRS(:,:,:,4)) - PRS(:,:,:,1) = PRS(:,:,:,1) + ZCOR(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = PRS(:,:,:,4) -ZCOR(:,:,:) - END WHERE - END IF -! - CASE('C2R2','KHKO') - WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.) - ZSVS(:,:,:,1) = 0.0 - END WHERE - DO JSV = 2, 3 - WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,JSV) = 0.0 - ZSVS(:,:,:,JSV) = 0.0 - END WHERE - ENDDO -! - CASE('C3R5') - WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.) - ZSVS(:,:,:,1) = 0.0 - END WHERE - DO JSV = 2, 3 - WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,JSV) = 0.0 - ZSVS(:,:,:,JSV) = 0.0 - END WHERE - ENDDO - ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) -! ice - WHERE (PRS(:,:,:,4) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = 0.0 - PSVS(:,:,:,4) = 0.0 - END WHERE -! cloud - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0.0 - PSVS(:,:,:,2) = 0.0 - END WHERE - PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) ) -! - CASE('LIMA') -! Correction where rc<0 or Nc<0 - IF (OWARM) THEN - WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRS(:,:,:,2) = 0.0 - ZSVS(:,:,:,NSV_LIMA_NC) = 0.0 - END WHERE - END IF -! Correction where rr<0 or Nr<0 - IF (OWARM .AND. ORAIN) THEN - WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRS(:,:,:,3) = 0.0 - ZSVS(:,:,:,NSV_LIMA_NR) = 0.0 - END WHERE - END IF -! Correction where ri<0 or Ni<0 - IF (LCOLD) THEN - WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXN(:,:,:) - PRS(:,:,:,4) = 0.0 - ZSVS(:,:,:,NSV_LIMA_NI) = 0.0 - END WHERE - END IF -! - ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) ) - PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) ) -! -END SELECT -! -! -!* 3.3 STORE THE BUDGET TERMS -! ---------------------- -! -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NECON_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NECON_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NECON_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NECON_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NECON_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NECON_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NECON_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NECON_BU_RRH') -IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN - IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NECON_BU_RSV') - IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NECON_BU_RSV') - IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NECON_BU_RSV') - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & - PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NECON_BU_RSV') - END DO - END IF - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & - PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NECON_BU_RSV') - END DO - END IF -END IF + +! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets +call Sources_neg_correct( hcloud, 'NECON', krr, ptstep, ppabst, ptht, prt, pths, prs, psvs, prhodj ) + !------------------------------------------------------------------------------- ! ! @@ -1329,14 +983,9 @@ DO JRR = 1,KRR END DO ! IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN - DO JSV = 1,SIZE(ZSVS,4) - PSVS(:,:,:,JSV+ISVBEG-1) = ZSVS(:,:,:,JSV) * PRHODJ(:,:,:) - ENDDO - DO JSV = 1,SIZE(ZSVT,4) - PSVT(:,:,:,JSV+ISVBEG-1) = ZSVT(:,:,:,JSV) + DO JSV = ISVBEG, ISVEND + PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) * PRHODJ(:,:,:) ENDDO - DEALLOCATE(ZSVS) - DEALLOCATE(ZSVT) ENDIF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/set_conc_lima.f90 b/src/MNH/set_conc_lima.f90 index 688d20a6bbef50f36ac33543b1ff3d076dde6543..3eeda7f5adc74f5e6b5f28bf2fd41cb64e56007e 100644 --- a/src/MNH/set_conc_lima.f90 +++ b/src/MNH/set_conc_lima.f90 @@ -1,32 +1,18 @@ -!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2000-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. !----------------------------------------------------------------- !####################################### - MODULE MODI_SET_CONC_LIMA -! ####################################### -! -INTERFACE -! - SUBROUTINE SET_CONC_LIMA (HGETCLOUD,PRHODREF,PRT,PSVT) -! -CHARACTER (LEN=4), INTENT(IN) :: HGETCLOUD ! Get indicator -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density -! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! microphysical mixing ratios -! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PSVT ! microphys. concentrations -! -! -END SUBROUTINE SET_CONC_LIMA -! -END INTERFACE -! -END MODULE MODI_SET_CONC_LIMA -! +module mode_set_conc_lima +!####################################### + +implicit none + +contains + ! ########################################################################### - SUBROUTINE SET_CONC_LIMA (HGETCLOUD,PRHODREF,PRT,PSVT) + SUBROUTINE SET_CONC_LIMA( kmi, HGETCLOUD, PRHODREF, PRT, PSVT ) ! ########################################################################### ! !!**** *SET_CONC_LIMA * - initialize droplet, raindrop and ice @@ -79,7 +65,9 @@ END MODULE MODI_SET_CONC_LIMA !! Original 15/11/00 !! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM * !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! B.Vié : 03/03/2020 secure physical tests +! B. Vié 03/03/2020: secure physical tests +! P. Wautelet 04/06/2020: correct array start for microphys. concentrations + add kmi dummy argument +! (this subroutine is also called for other models) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -87,7 +75,8 @@ END MODULE MODI_SET_CONC_LIMA ! USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, LCOLD, LWARM, LRAIN, NMOD_CCN, NMOD_IFN USE MODD_PARAM_LIMA_COLD, ONLY : XAI, XBI -USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_ACTI, NSV_LIMA_NI, NSV_LIMA_IFN_NUCL +USE MODD_NSV, ONLY : NSV_LIMA_BEG_A, NSV_LIMA_NC_A, NSV_LIMA_NR_A, NSV_LIMA_CCN_ACTI_A, & + NSV_LIMA_NI_A, NSV_LIMA_IFN_NUCL_A USE MODD_CST, ONLY : XPI, XRHOLW, XRHOLI USE MODD_CONF, ONLY : NVERB USE MODD_CONF_n, ONLY : NRR @@ -97,12 +86,13 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +integer, intent(in) :: kmi ! Model number CHARACTER (LEN=4), INTENT(IN) :: HGETCLOUD ! Get indicator REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density ! REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! microphysical mixing ratios ! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PSVT ! microphys. concentrations +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG_A(kmi):), INTENT(INOUT):: PSVT ! microphys. concentrations ! ! !* 0.2 Declarations of local variables : @@ -126,19 +116,19 @@ IF (LWARM .AND. NRR.GE.2) THEN ! ZCONCC = 300.E6 ! droplet concentration set at 300 cm-3 WHERE ( PRT(:,:,:,2) > 1.E-11 ) - PSVT(:,:,:,NSV_LIMA_NC) = ZCONCC + PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = ZCONCC END WHERE WHERE ( PRT(:,:,:,2) <= 1.E-11 ) PRT(:,:,:,2) = 0.0 - PSVT(:,:,:,NSV_LIMA_NC) = 0.0 + PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = 0.0 END WHERE IF (NMOD_CCN .GE. 1) THEN WHERE ( PRT(:,:,:,2) > 1.E-11 ) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI) = ZCONCC + PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = ZCONCC END WHERE WHERE ( PRT(:,:,:,2) <= 1.E-11 ) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI) = 0.0 + PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = 0.0 END WHERE END IF @@ -154,15 +144,15 @@ IF (LWARM .AND. LRAIN .AND. NRR.GE.3) THEN ! ZCONCR = (1.E7)**3/(XPI*XRHOLW) ! cf XCONCR_PARAM_INI in ini_rain_c2r2.f90 IF (HGETCLOUD == 'INI1') THEN ! init from REVE scheme - PSVT(:,:,:,NSV_LIMA_NR) = 0.0 + PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0 ELSE ! init from KESS, ICE3... WHERE ( PRT(:,:,:,3) > 1.E-11 ) - PSVT(:,:,:,NSV_LIMA_NR) = MAX( SQRT(SQRT(PRHODREF(:,:,:)*PRT(:,:,:,3) & + PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = MAX( SQRT(SQRT(PRHODREF(:,:,:)*PRT(:,:,:,3) & *ZCONCR)),1. ) END WHERE WHERE ( PRT(:,:,:,3) <= 1.E-11 ) PRT(:,:,:,3) = 0.0 - PSVT(:,:,:,NSV_LIMA_NR) = 0.0 + PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0 END WHERE IF( NVERB >= 5 ) THEN WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The raindrop concentration has " @@ -178,23 +168,23 @@ IF (LCOLD .AND. NRR.GE.4) THEN ZCONCI = 100.E3 ! maximum ice concentration set at 100/L WHERE ( PRT(:,:,:,4) > 1.E-11 ) ! -! PSVT(:,:,:,NSV_LIMA_NI) = MIN( PRHODREF(:,:,:) / & +! PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN( PRHODREF(:,:,:) / & ! ( XRHOLI * XAI*(10.E-06)**XBI * PRT(:,:,:,4) ), & ! ZCONCI ) ! Correction - PSVT(:,:,:,NSV_LIMA_NI) = MIN(PRT(:,:,:,4)/(0.82*(10.E-06)**2.5),ZCONCI ) + PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN(PRT(:,:,:,4)/(0.82*(10.E-06)**2.5),ZCONCI ) END WHERE WHERE ( PRT(:,:,:,4) <= 1.E-11 ) PRT(:,:,:,4) = 0.0 - PSVT(:,:,:,NSV_LIMA_NI) = 0.0 + PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = 0.0 END WHERE IF (NMOD_IFN .GE. 1) THEN WHERE ( PRT(:,:,:,4) > 1.E-11 ) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL) = PSVT(:,:,:,NSV_LIMA_NI) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) END WHERE WHERE ( PRT(:,:,:,4) <= 1.E-11 ) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL) = 0.0 + PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = 0.0 END WHERE END IF @@ -206,3 +196,5 @@ IF (LCOLD .AND. NRR.GE.4) THEN END IF ! END SUBROUTINE SET_CONC_LIMA + +end module mode_set_conc_lima diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90 new file mode 100644 index 0000000000000000000000000000000000000000..c0fc8062ebb963fa220b99cd750d4925c143aabc --- /dev/null +++ b/src/MNH/sources_neg_correct.f90 @@ -0,0 +1,288 @@ +!MNH_LIC Copyright 2020-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. +!----------------------------------------------------------------- +! Author: P. Wautelet 25/06/2020 (deduplication of code from advection_metsv, resolved_cloud and turb) +! Modifications: +! P. Wautelet 30/06/2020: remove non-local corrections in resolved_cloud for NEGA => new local corrections here +!----------------------------------------------------------------- +module mode_sources_neg_correct + +implicit none + +private + +public :: Sources_neg_correct + +contains + +subroutine Sources_neg_correct( hcloud, hbudname, krr, ptstep, ppabst, ptht, prt, prths, prrs, prsvs, prhodj ) + +use modd_budget, only: lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, lbudget_ri, & + lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv +use modd_cst, only: xci, xcl, xcpd, xcpv, xlstt, xlvtt, xp00, xrd, xtt +use modd_nsv, only: nsv_c2r2beg, nsv_lima_beg, nsv_lima_end, nsv_lima_nc, nsv_lima_nr, nsv_lima_ni +use modd_param_lima, only: lcold_lima => lcold, lrain_lima => lrain, lwarm_lima => lwarm, & + xctmin_lima => xctmin, xrtmin_lima => xrtmin + +use mode_msg + +use modi_budget + +implicit none + +character(len=*), intent(in) :: hcloud ! Kind of cloud parameterization +character(len=*), intent(in) :: hbudname ! Budget name +integer, intent(in) :: krr ! Number of moist variables +real, intent(in) :: ptstep ! Timestep +real, dimension(:, :, :), intent(in) :: ppabst ! Absolute pressure at time t +real, dimension(:, :, :), intent(in) :: ptht ! Theta at time t +real, dimension(:, :, :, :), intent(in) :: prt ! Moist variables at time t +real, dimension(:, :, :), intent(inout) :: prths ! Source terms +real, dimension(:, :, :, :), intent(inout) :: prrs ! Source terms +real, dimension(:, :, :, :), intent(inout) :: prsvs ! Source terms +real, dimension(:, :, :), intent(in), optional :: prhodj ! Dry density * jacobian + +integer :: ji, jj, jk +integer :: jr +integer :: jrmax +integer :: jsv +real, dimension(:, :, :), allocatable :: zt, zexn, zlv, zls, zcph, zcor + +if ( hbudname /= 'NEADV' .and. hbudname /= 'NECON' .and. hbudname /= 'NEGA' .and. hbudname /= 'NETUR' ) & + call Print_msg( NVERB_WARNING, 'GEN', 'Sources_neg_correct', 'budget '//hbudname//' not yet tested' ) + +allocate( zt ( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) +allocate( zexn( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) +allocate( zlv ( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) +allocate( zcph( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) + +zexn(:, :, :) = ( ppabst(:, :, :) / xp00 ) ** (xrd / xcpd ) +zt (:, :, :) = ptht(:, :, :) * zexn(:, :, :) +zlv (:, :, :) = xlvtt + ( xcpv - xcl ) * ( zt(:, :, :) - xtt ) +if ( hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA' ) then + allocate( zls( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) + zls(:, :, :) = xlstt + ( xcpv - xci ) * ( zt(:, :, :) - xtt ) +end if +zcph(:, :, :) = xcpd + xcpv * prt(:, :, :, 1) + +deallocate( zt ) + +CLOUD: select case ( hcloud ) + case ( 'KESS' ) + jrmax = Size( prrs, 4 ) + do jr = 2, jrmax + where ( prrs(:, :, :, jr) < 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, jr) = 0. + end where + end do + + where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 2) = 0. + end where + + + case( 'ICE3', 'ICE4' ) + if ( hbudname == 'NETUR' ) then + jrmax = 4 + else + jrmax = Size( prrs, 4 ) + end if + do jr = 4, jrmax + where ( prrs(:, :, :, jr) < 0.) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zls(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, jr) = 0. + end where + end do +! +! cloud + if ( hbudname == 'NETUR' ) then + jrmax = 2 + else + jrmax = 3 + end if + do jr = 2, jrmax + where ( prrs(:, :, :, jr) < 0.) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, jr) = 0. + end where + end do +! +! if rc or ri are positive, we can correct negative rv +! cloud + where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 2) = 0. + end where +! ice + if ( krr > 3 ) then + allocate( zcor( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) + where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 4) > 0. ) + zcor(:, :, :) = Min( -prrs(:, :, :, 1), prrs(:, :, :, 4) ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + zcor(:, :, :) + prths(:, :, :) = prths(:, :, :) - zcor(:, :, :) * zls(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 4) = prrs(:, :, :, 4) - zcor(:, :, :) + end where + end if +! +! + case( 'C2R2', 'KHKO' ) + where ( prrs(:, :, :, 2) < 0. .or. prsvs(:, :, :, nsv_c2r2beg + 1) < 0. ) + prsvs(:, :, :, nsv_c2r2beg) = 0. + end where + do jsv = 2, 3 + where ( prrs(:, :, :, jsv) < 0. .or. prsvs(:, :, :, nsv_c2r2beg - 1 + jsv) < 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jsv) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jsv) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, jsv) = 0. + prsvs(:, :, :, nsv_c2r2beg - 1 + jsv) = 0. + end where + end do + where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 2) = 0. + prsvs(:, :, :, nsv_c2r2beg + 1) = 0. + end where +! +! + case( 'LIMA' ) +! Correction where rc<0 or Nc<0 + if ( lwarm_lima ) then + where ( prrs(:, :, :, 2) < xrtmin_lima(2) / ptstep .or. prsvs(:, :, :, nsv_lima_nc) < xctmin_lima(2) / ptstep ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 2) = 0. + prsvs(:, :, :, nsv_lima_nc) = 0. + end where + where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 2) = 0. + prsvs(:, :, :, nsv_lima_nc) = 0. + end where + end if +! Correction where rr<0 or Nr<0 + if ( lwarm_lima .and. lrain_lima ) then + where ( prrs(:, :, :, 3) < xrtmin_lima(3) / ptstep .or. prsvs(:, :, :, nsv_lima_nr) < xctmin_lima(3) / ptstep ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 3) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 3) * zlv(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 3) = 0. + prsvs(:, :, :, nsv_lima_nr) = 0. + end where + end if +! Correction where ri<0 or Ni<0 + if ( lcold_lima ) then + where ( prrs(:, :, :, 4) < xrtmin_lima(4) / ptstep .or. prsvs(:, :, :, nsv_lima_ni) < xctmin_lima(4) / ptstep ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 4) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 4) * zls(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 4) = 0. + prsvs(:, :, :, nsv_lima_ni) = 0. + end where + if ( hbudname /= 'NETUR' ) then + do jr = 5, Size( prrs, 4 ) + where ( prrs(:, :, :, jr) < 0. ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr) + prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zls(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, jr) = 0. + end where + end do + end if + if(krr > 3) then + allocate( zcor( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) ) + where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 4) > 0. ) + zcor(:, :, :) = Min( -prrs(:, :, :, 1), prrs(:, :, :, 4) ) + prrs(:, :, :, 1) = prrs(:, :, :, 1) + zcor(:, :, :) + prths(:, :, :) = prths(:, :, :) - zcor(:, :, :) * zls(:, :, :) / & + ( zcph(:, :, :) * zexn(:, :, :) ) + prrs(:, :, :, 4) = prrs(:, :, :, 4) - zcor(:, :, :) + end where + deallocate( zcor ) + end if + end if + + prsvs(:, :, :, nsv_lima_beg : nsv_lima_end) = Max( 0.0, prsvs(:, :, :, nsv_lima_beg : nsv_lima_end) ) + +end select CLOUD + +if ( hbudname /= 'NECON' .and. hbudname /= 'NEGA' ) then + if ( hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. & + hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) then + if ( lbudget_th ) call Budget( prths(:, :, :), 4, Trim( hbudname )//'_BU_RTH' ) + if ( lbudget_rv ) call Budget( prrs (:, :, :, 1), 6, Trim( hbudname )//'_BU_RRV' ) + if ( lbudget_rc ) call Budget( prrs (:, :, :, 2), 7, Trim( hbudname )//'_BU_RRC' ) + if ( lbudget_rr .and. & + ( hbudname /= 'NETUR' .or. & + ( hbudname == 'NETUR' .and. ( hcloud == 'C2R2' .or. hcloud == 'KHKO' .or. hcloud == 'LIMA' ) ) ) ) & + call Budget( prrs(:, :, :, 3), 8, Trim( hbudname )//'_BU_RRR' ) + IF (lbudget_ri .and. & + ( hbudname /= 'NETUR' .or. & + ( hbudname == 'NETUR' .and. ( hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA' ) ) ) ) & + call Budget( prrs(:, :, :, 4), 9, Trim( hbudname )//'_BU_RRI' ) + IF (lbudget_rs .and. hbudname /= 'NETUR' ) call Budget( prrs(:, :, :, 5), 10, Trim( hbudname )//'_BU_RRS' ) + IF (lbudget_rg .and. hbudname /= 'NETUR' ) call Budget( prrs(:, :, :, 6), 11, Trim( hbudname )//'_BU_RRG' ) + IF (lbudget_rh .and. hbudname /= 'NETUR' ) call Budget( prrs(:, :, :, 7), 12, Trim( hbudname )//'_BU_RRH' ) + END IF + + if ( lbudget_sv .and. (hcloud == 'C2R2' .or. hcloud == 'KHKO' ) ) then + do ji = 1, 3 + call Budget( prsvs(:, :, :, nsv_c2r2beg - 1 + ji), 12 + nsv_c2r2beg - 1 + ji, Trim( hbudname )//'_BU_RSV' ) + end do + end if + if ( lbudget_sv .and. hcloud == 'LIMA' ) then + do ji = nsv_lima_beg, nsv_lima_end + call Budget( prsvs(:, :, :, ji), 12 + ji, Trim( hbudname )//'_BU_RSV' ) + end do + end if +else !NECON + NEGA + if ( .not. present( prhodj ) ) & + call Print_msg( NVERB_FATAL, 'GEN', 'Sources_neg_correct', 'optional argument prhodj not present' ) + + if ( hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. & + hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) then + if ( lbudget_th) call Budget( prths(:, :, :) * prhodj(:, :, :), 4, Trim( hbudname )//'_BU_RTH' ) + if ( lbudget_rv) call Budget( prrs (:, :, :, 1) * prhodj(:, :, :), 6, Trim( hbudname )//'_BU_RRV' ) + if ( lbudget_rc) call Budget( prrs (:, :, :, 2) * prhodj(:, :, :), 7, Trim( hbudname )//'_BU_RRC' ) + if ( lbudget_rr) call Budget( prrs (:, :, :, 3) * prhodj(:, :, :), 8, Trim( hbudname )//'_BU_RRR' ) + if ( lbudget_ri) call Budget( prrs (:, :, :, 4) * prhodj(:, :, :), 9, Trim( hbudname )//'_BU_RRI' ) + if ( lbudget_rs) call Budget( prrs (:, :, :, 5) * prhodj(:, :, :), 10, Trim( hbudname )//'_BU_RRS' ) + if ( lbudget_rg) call Budget( prrs (:, :, :, 6) * prhodj(:, :, :), 11, Trim( hbudname )//'_BU_RRG' ) + if ( lbudget_rh) call Budget( prrs (:, :, :, 7) * prhodj(:, :, :), 12, Trim( hbudname )//'_BU_RRH' ) + end if + + if ( lbudget_sv .and. (hcloud == 'C2R2' .or. hcloud == 'KHKO' )) then + do ji = 1, 3 + call Budget( prsvs(:, :, :, nsv_c2r2beg - 1 + ji), 12 + nsv_c2r2beg - 1 + ji, Trim( hbudname )//'_BU_RSV' ) + end do + end if + if ( lbudget_sv .and. hcloud == 'LIMA' ) then + do ji = nsv_lima_beg, nsv_lima_end + call Budget( prsvs(:, :, :, ji), 12 + ji, Trim( hbudname )//'_BU_RSV' ) + end do + end if +end if + +end subroutine Sources_neg_correct + +end module mode_sources_neg_correct diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 8569cce72a47b9f6d62344af6a52a837be247d6f..4d624e5418a37ed2307be67002e2cad2e2ef75a5 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -1,4 +1,4 @@ - !MNH_LIC Copyright 1994-2020 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. @@ -342,8 +342,11 @@ END MODULE MODI_TURB !! 01/2018 (Q.Rodier) Introduction of RM17 ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine ! B. Vie 03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets -!! -------------------------------------------------------------------------- -! +! P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices +! P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets +! P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! @@ -378,6 +381,7 @@ USE MODI_GET_HALO USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODE_SBL +use mode_sources_neg_correct, only: Sources_neg_correct ! USE MODI_EMOIST USE MODI_ETHETA @@ -1110,139 +1114,10 @@ IF ( KRRL >= 1 ) THEN PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2) END IF END IF -! -SELECT CASE ( HCLOUD ) - CASE('ICE3','ICE4') - ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) - ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:) - ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT) - ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT) - ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) - WHERE (PRRS(:,:,:,4) < 0.) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,4) = 0. - END WHERE -! -! cloud - WHERE (PRRS(:,:,:,2) < 0.) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,2) = 0. - END WHERE -! -! if rc or ri are positive, we can correct negative rv -! cloud - WHERE ((PRRS(:,:,:,1) <0.) .AND. (PRRS(:,:,:,2)> 0.) ) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,2) = 0. - END WHERE -! ice - IF(KRR > 3) THEN - WHERE ((PRRS(:,:,:,1) < 0.).AND.(PRRS(:,:,:,4) > 0.)) - ZCOR(:,:,:)=MIN(-PRRS(:,:,:,1),PRRS(:,:,:,4)) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + ZCOR(:,:,:) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZCOR(:,:,:) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,4) = PRRS(:,:,:,4) -ZCOR(:,:,:) - END WHERE - END IF -! - CASE('C2R2','KHKO') - ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) - ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:) - ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT) - ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT) - ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) -! CALL GET_HALO(PRRS(:,:,:,2)) -! CALL GET_HALO(PRSVS(:,:,:,2)) -! CALL GET_HALO(PRSVS(:,:,:,3)) - WHERE (PRRS(:,:,:,2) < 0. .OR. PRSVS(:,:,:,2) < 0.) - PRSVS(:,:,:,1) = 0.0 - END WHERE - DO JSV = 2, 3 - WHERE (PRRS(:,:,:,JSV) < 0. .OR. PRSVS(:,:,:,JSV) < 0.) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,JSV) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,JSV) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,JSV) = 0.0 - PRSVS(:,:,:,JSV) = 0.0 - END WHERE - END DO - ! - CASE('LIMA') - ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) - ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:) - ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT) - ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT) - ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) -! Correction where rc<0 or Nc<0 - IF (LWARM) THEN - WHERE (PRRS(:,:,:,2) < XRTMIN(2)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NC) < XCTMIN(2)/PTSTEP) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,2) = 0.0 - PRSVS(:,:,:,NSV_LIMA_NC) = 0.0 - END WHERE - END IF -! Correction where rr<0 or Nr<0 - IF (LWARM .AND. LRAIN) THEN - WHERE (PRRS(:,:,:,3) < XRTMIN(3)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NR) < XCTMIN(3)/PTSTEP) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,3) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,3) * ZLV(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,3) = 0.0 - PRSVS(:,:,:,NSV_LIMA_NR) = 0.0 - END WHERE - END IF -! Correction where ri<0 or Ni<0 - IF (LCOLD) THEN - WHERE (PRRS(:,:,:,4) < XRTMIN(4)/PTSTEP .OR. PRSVS(:,:,:,NSV_LIMA_NI) < XCTMIN(4)/PTSTEP) - PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,4) - PRTHLS(:,:,:) = PRTHLS(:,:,:) - PRRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / ZEXNE(:,:,:) - PRRS(:,:,:,4) = 0.0 - PRSVS(:,:,:,NSV_LIMA_NI) = 0.0 - END WHERE - END IF -! - PRSVS(:,:,:,:) = MAX( 0.0,PRSVS(:,:,:,:) ) - PRRS(:,:,:,:) = MAX( 0.0,PRRS(:,:,:,:) ) -! -END SELECT -! -IF ((HCLOUD == 'ICE3') .OR. (HCLOUD == 'ICE4') .OR. (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') .OR. (HCLOUD == 'LIMA') ) THEN - IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), 8,'NETUR_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), 9,'NETUR_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'NETUR_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'NETUR_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'NETUR_BU_RRH') -END IF -IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN - IF (LWARM) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NC),12+NSV_LIMA_NC,'NETUR_BU_RSV') - IF (LWARM.AND.LRAIN) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NR),12+NSV_LIMA_NR,'NETUR_BU_RSV') - IF (LCOLD) CALL BUDGET (PRSVS(:,:,:,NSV_LIMA_NI),12+NSV_LIMA_NI,'NETUR_BU_RSV') - IF (NMOD_CCN.GE.1) THEN - DO JI=1, NMOD_CCN - CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JI-1),12+NSV_LIMA_CCN_FREE+JI-1,'NETUR_BU_RSV') - END DO - END IF - IF (NMOD_IFN.GE.1) THEN - DO JI=1, NMOD_IFN - CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JI-1),12+NSV_LIMA_IFN_FREE+JI-1,'NETUR_BU_RSV') - END DO - END IF -END IF -! +! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets +call Sources_neg_correct( hcloud, 'NETUR', krr, ptstep, ppabst, pthlt, prt, prthls, prrs, prsvs ) + !---------------------------------------------------------------------------- ! !* 9. LES averaged surface fluxes diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 29448bab9ed69fc142cb96a0a161c2d667f772ee..f8759f31be3fd1fba28889b9ef8aedde1d82237e 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -668,11 +668,11 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN TZFIELD%CUNITS = 'mm hour-1' CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21*3.6E6) ! - ZWORK21(:,:) = (XACPRR(:,:) + XACPRS(:,:) + XACPRG(:,:))*1.0E3 + ZWORK21(:,:) = XACPRR(:,:) + XACPRS(:,:) + XACPRG(:,:) IF (SIZE(XINPRC) /= 0 ) & - ZWORK21(:,:) = ZWORK21(:,:) + XACPRC(:,:)*1.0E3 + ZWORK21(:,:) = ZWORK21(:,:) + XACPRC(:,:) IF (SIZE(XINPRH) /= 0 ) & - ZWORK21(:,:) = ZWORK21(:,:) + XACPRH(:,:)*1.0E3 + ZWORK21(:,:) = ZWORK21(:,:) + XACPRH(:,:) ! CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRT',IID,IRESP) TZFIELD = TFIELDLIST(IID) @@ -1151,11 +1151,12 @@ IF (LLIMA_DIAG) THEN TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_CONC(3))//INDICE//'T' END IF ! N IMM nucl - I = 0 IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN - I = I + 1 - WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) - TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_CONC(4))//INDICE//'T' + DO I = 1, NMOD_IMM ! to be supressed +! WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_BEG - NSV_LIMA_IMM_NUCL + 1)) + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) ! to be supressed + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_CONC(4))//INDICE//'T' + ENDDO END IF ! Hom. freez. of CCN IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN @@ -1199,7 +1200,7 @@ IF (LLIMA_DIAG) THEN ! END IF ! -! chemical scalar variables in gas phase PPBV +! chemical scalar variables in gas phase ppbv IF (LCHEMDIAG) THEN DO JSV = NSV_CHGSBEG,NSV_CHGSEND TZFIELD%CMNHNAME = TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))//'T' @@ -1217,8 +1218,7 @@ IF (LCHEMDIAG) THEN END IF IF (LCHAQDIAG) THEN !aqueous concentration in M TZFIELD%CSTDNAME = '' - !PW TODO: check units - TZFIELD%CUNITS = '' + TZFIELD%CUNITS = 'M' TZFIELD%CDIR = 'XY' TZFIELD%NGRID = 1 TZFIELD%NTYPE = TYPEREAL @@ -1227,9 +1227,9 @@ IF (LCHAQDIAG) THEN !aqueous concentration in M ! ZWORK31(:,:,:)=0. DO JSV = NSV_CHACBEG, NSV_CHACBEG-1+NEQAQ/2 !cloud water - TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'M' + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)' + WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHAQ',JSV WHERE(((XRT(:,:,:,2)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ) ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,2)) ENDWHERE @@ -1238,9 +1238,9 @@ IF (LCHAQDIAG) THEN !aqueous concentration in M ! ZWORK31(:,:,:)=0. DO JSV = NSV_CHACBEG+NEQAQ/2, NSV_CHACEND !rain water - TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'M' + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)' + WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHAQ',JSV WHERE(((XRT(:,:,:,3)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ) ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,3)) ENDWHERE diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index e2c1038474ab4d59e9e77a76d6929aa39853eb27..e186429e291ea1f1b17804cbff1209ce8a535246 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -761,11 +761,13 @@ IF (NSV >=1) THEN TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' END IF ! N IMM nucl - I = 0 IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN - I = I + 1 - WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + DO I = 1, NMOD_IMM ! to be supressed +! ML start to 1 to get the CCN mode indice acting as IN by immersion +! WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_BEG - NSV_LIMA_IMM_NUCL + 1)) + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) ! to be supresses TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + ENDDO END IF ! Hom. freez. of CCN IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN diff --git a/src/MNH/xy_to_latlon.f90 b/src/MNH/xy_to_latlon.f90 index 6d3087710bd30150c94a681090cebdd2b1269ceb..f8782a519e3cbe897bd676f5b72d5334b5559ee6 100644 --- a/src/MNH/xy_to_latlon.f90 +++ b/src/MNH/xy_to_latlon.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2006-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-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. @@ -53,15 +53,17 @@ !! !! no transfer of the file when closing Dec. 09, 1996 (V.Masson) !! + changes call to READ_HGRID -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! P. Wautelet 14/04/2020: add missing initializations (XY_TO_LATLON was not working) !---------------------------------------------------------------------------- ! !* 0. DECLARATION ! ----------- ! -! +use MODD_CONF, only: CPROGRAM +USE MODD_DIM_n USE MODD_GRID USE MODD_IO, ONLY: TFILEDATA USE MODD_PGDDIM @@ -69,10 +71,14 @@ USE MODD_PGDGRID USE MODD_PARAMETERS USE MODD_LUNIT ! +USE MODE_FIELD, ONLY: INI_FIELD_LIST USE MODE_GRIDPROJ USE MODE_IO, only: IO_Config_set, IO_Init +use MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_IO_FILE, only: IO_File_close, IO_File_open USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list +USE MODE_MODELN_HANDLER, ONLY: GOTO_MODEL +use MODE_SPLITTINGZ_ll ! USE MODI_INI_CST USE MODI_READ_HGRID @@ -115,16 +121,26 @@ NAMELIST/NAM_INIFILE/ YINIFILE !* 1. Initializations ! --------------- ! -CALL INI_CST +CALL GOTO_MODEL(1) +! +CALL VERSION() +! +CPROGRAM='LAT2XY' +! +CALL IO_Init() +! +CALL INI_CST() +! +CALL INI_FIELD_LIST(1) ! !* 2. Reading of namelist file ! ------------------------ -CALL IO_Init() ! CALL IO_File_add2list(TZNMLFILE,'XY2LATLON1.nam','NML','READ') CALL IO_File_open(TZNMLFILE) INAM=TZNMLFILE%NLU READ(INAM,NAM_INIFILE) +! READ(INAM,NAM_CONFIO) CALL IO_Config_set() CALL IO_File_close(TZNMLFILE) @@ -135,6 +151,15 @@ CALL IO_File_close(TZNMLFILE) CALL IO_File_add2list(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2) CALL IO_File_open(TZINIFILE) ! +CALL IO_Field_read(TZINIFILE,'IMAX', NIMAX) +CALL IO_Field_read(TZINIFILE,'JMAX', NJMAX) +NKMAX = 1 +CALL IO_Field_read(TZINIFILE,'JPHEXT',JPHEXT) +! +CALL SET_JP_ll(1,JPHEXT,JPVEXT,JPHEXT) +CALL SET_DIM_ll(NIMAX, NJMAX, NKMAX) +CALL INI_PARAZ_ll(IRESP) +! !* 2. Reading of MESONH file ! ---------------------- ! diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk index 956cd7e4591f67c834a7439a5d819ae6e1b528f3..8a001528d0f33890b7d8fd53158745c9ec87da29 100644 --- a/src/Rules.LXgfortran.mk +++ b/src/Rules.LXgfortran.mk @@ -125,6 +125,7 @@ MNH_COMPRESS=yes ifeq ($(shell test $(GFV) -ge 1010 ; echo $$?),0) OPT_BASE += -fallow-argument-mismatch GRIB_FLAGS += -fallow-argument-mismatch +NETCDF_SUPPFLAGS += -fallow-argument-mismatch endif ########################################################## # # diff --git a/src/SURFEX/writesurf_pgd_isba_parn.F90 b/src/SURFEX/writesurf_pgd_isba_parn.F90 index 5b9fa2248459c712aa784d36c00259ec1b9ff934..c3a0cf8e6191085474daa98ad18abe46abbc5032 100644 --- a/src/SURFEX/writesurf_pgd_isba_parn.F90 +++ b/src/SURFEX/writesurf_pgd_isba_parn.F90 @@ -1,4 +1,4 @@ -!SFX_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC Copyright 2003-2020 CNRS, Meteo-France and Universite Paul Sabatier !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. @@ -36,6 +36,7 @@ !! P. Le Moigne 12/2004 : add type of photosynthesis !! P. Samuelsson 10/2014: MEB !! P. Wautelet 01/2019: bug: write L_STRESS only if it exists +!! P. Wautelet 12/06/2020: bugfix: moved condition on LPAR_STRESS (LDATA_STRESS was not written) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -500,10 +501,10 @@ DO JV=1,DTV%NVEGTYPE ENDIF ENDDO ! -IF (ASSOCIATED(DTV%LPAR_STRESS)) THEN YRECFM='L_STRESS' YCOMMENT=YRECFM CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,DTV%LDATA_STRESS,IRESP,HCOMMENT=YCOMMENT,HDIR='-') +IF (ASSOCIATED(DTV%LPAR_STRESS)) THEN ALLOCATE(ZWORK(SIZE(DTV%LPAR_STRESS,1))) DO JV=1,DTV%NVEGTYPE IF (DTV%LDATA_STRESS(JV)) THEN diff --git a/src/configure b/src/configure index 25a23d27e40781727e295162873a5801e4e92764..31e21f5699a5b8514218bd8a284c4d4319728cfc 100755 --- a/src/configure +++ b/src/configure @@ -123,16 +123,15 @@ module load ncl_ncarg/6.3.0 *Intel*) # Irene Intel core export MNH_ARCH=`echo $ARCH | grep LX` export ARCH=${MNH_ARCH:-LXifort} - export VER_MPI=${VER_MPI:-MPIINTEL} + export VER_MPI=${VER_MPI:-MPIAUTO} export OPTLEVEL=${OPTLEVEL:-O2} export MVWORK=${MVWORK:-NO} export VER_CDF=${VER_CDF:-CDFAUTO} export MNHENV=${MNHENV:-" module purge module load intel/18.0.3.222 -module load mpi/intelmpi/2018.0.3.222 +module load mpi/openmpi/2.0.4 export SLURM_CPU_BIND=none -export I_MPI_PIN_PROCESSOR_LIST=all:map=spread "} ;; *AMD*) # Irene AMD core @@ -147,6 +146,7 @@ export I_MPI_PIN_PROCESSOR_LIST=all:map=spread module purge module load intel/19.0.5.281 module load mpi/openmpi/4.0.2 +export SLURM_CPU_BIND=none # Set some openmpi variable for pb with nb of cores >> 1024 export OMPI_MCA_coll_hcoll_enable=0 export HCOLL_ENABLE_MCAST_ALL=0 diff --git a/src/job_make_examples_BG b/src/job_make_examples_BG index 3c126674242029a00049b6789ead6dce369308a0..6da925726b7a56986ee9f49780a0f04e26a6b422 100755 --- a/src/job_make_examples_BG +++ b/src/job_make_examples_BG @@ -18,7 +18,7 @@ set -x cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-3-MPIAUTO-O2 #001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier diff --git a/src/job_make_examples_BGQ b/src/job_make_examples_BGQ index 5b0bf5246a5d019fffc5dfdb5fafca2b802d4768..d79d3f120d1d920c4987242061804a81218701c7 100755 --- a/src/job_make_examples_BGQ +++ b/src/job_make_examples_BGQ @@ -18,7 +18,7 @@ cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-2-MPIAUTO-O2NAN +. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-3-MPIAUTO-O2NAN set -x diff --git a/src/job_make_examples_BullX b/src/job_make_examples_BullX index 6e53b1a9b2257a6da3a8043f3244934822154073..f7b3df0436b43c8ed7cd83fc45aef6ba36cadeda 100755 --- a/src/job_make_examples_BullX +++ b/src/job_make_examples_BullX @@ -19,7 +19,7 @@ set -e hostname # Echo des commandes -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O3 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O3 export MONORUN="Mpirun -np 1 " export MPIRUN="Mpirun -np 2 " export POSTRUN="time " diff --git a/src/job_make_examples_BullX_irene b/src/job_make_examples_BullX_irene index 6e0f0f1f59d713780ab529e523a4b2cdba1e6f87..231bdbf7f163f0a2ee974cfac0f67f795cde82e7 100755 --- a/src/job_make_examples_BullX_irene +++ b/src/job_make_examples_BullX_irene @@ -1,8 +1,7 @@ #!/bin/bash #MSUB -J Examples #MSUB -N 2 # nodes number -#MSUB -n 4 # CPUs number (on all nodes) -#MSUB --exclusive +#MSUB -n 4 # CPUs number (on all nodes) #MSUB -o Examples.eo%j # #MSUB -e Examples.eo%j # #MSUB -T 3600 # time limit @@ -11,6 +10,7 @@ #MSUB -x # exclusive usage of nodes #MSUB -X # enable X forwarding -> force 'ccc_msub -i ' to get it work #MSUB -q skylake +##MSUB -q knl # Echo des commandes ulimit -c 0 @@ -21,15 +21,15 @@ set +x # Nom de la machine hostname -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIAUTO-O2 set -x module list -export MONORUN="Exec ccc_mprun -n 1 " -export MPIRUN="Exec ccc_mprun -n 4 " -export POSTRUN="time " +export MONORUN="Mpirun -tag-output --report-bindings -np 1 " +export MPIRUN="Mpirun -tag-output --report-bindings -np 4 " +export POSTRUN="echo " cd $SRC_MESONH/MY_RUN/KTEST/003_KW78 make -k diff --git a/src/job_make_examples_BullX_irene_AMD b/src/job_make_examples_BullX_irene_AMD new file mode 100755 index 0000000000000000000000000000000000000000..b853b78c6797c042a7f0ffffb5c2809f4b55db3e --- /dev/null +++ b/src/job_make_examples_BullX_irene_AMD @@ -0,0 +1,73 @@ +#!/bin/bash +#MSUB -J Examples +#MSUB -N 2 # nodes number +#MSUB -n 4 # CPUs number (on all nodes) +#MSUB -o Examples_AMD.eo%j # +#MSUB -e Examples_AMD.eo%j # +#MSUB -T 3600 # time limit +#MSUB -I # do not propaget variable from interactif +#MSUB -m work,scratch,store # use this files system +#MSUB -x # exclusive usage of nodes +##MSUB -X # enable X forwarding -> force 'ccc_msub -i ' to get it work +#MSUB -q rome + +# Echo des commandes +ulimit -c 0 +ulimit -s unlimited +# Arrete du job des la premiere erreur +#set -e +set +x +# Nom de la machine +hostname + +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-AMD-MPIAUTO-O2 + +set -x + +module list + +export MONORUN="Exec srun -l -K --cpu_bind=none --export=ALL -N 1 -n 1 numabind_core_slurm" +export MPIRUN="Exec srun -l -K --cpu_bind=none --export=ALL -n 4 numabind_core_slurm" +export POSTRUN="echo " + +cd $SRC_MESONH/MY_RUN/KTEST/003_KW78 +make -k +# +echo "#################################################################################" +echo "##CAS SUIVANT####################################################################" +echo "#################################################################################" +cd $SRC_MESONH/MY_RUN/KTEST/001_2Drelief +make -k +# +echo "#################################################################################" +echo "##CAS SUIVANT####################################################################" +echo "#################################################################################" +cd $SRC_MESONH/MY_RUN/KTEST/002_3Drelief +make -k +# +echo "#################################################################################" +echo "##CAS SUIVANT####################################################################" +echo "#################################################################################" + +cd $SRC_MESONH/MY_RUN/KTEST/004_Reunion +make -k << EOF + + +EOF +# +echo "#################################################################################" +echo "##CAS SUIVANT####################################################################" +echo "#################################################################################" +cd $SRC_MESONH/MY_RUN/KTEST/007_16janvier +make -k << EOF + + +EOF +# +echo "#################################################################################" +echo "##CAS SUIVANT####################################################################" +echo "#################################################################################" +cd $SRC_MESONH/MY_RUN/KTEST/014_LIMA +make -k + + diff --git a/src/job_make_examples_BullX_jeanzay b/src/job_make_examples_BullX_jeanzay index 82ee2e6a67cd69fbdaea3cc6d92201974141e7dc..71ddd1a7653ae74bf3dc4bdc2ee9f7a249ee7a85 100755 --- a/src/job_make_examples_BullX_jeanzay +++ b/src/job_make_examples_BullX_jeanzay @@ -21,7 +21,7 @@ hostname . ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O2 export MONORUN="Exec srun -l -n 1 --export=ALL numabind_core_slurm" export MPIRUN="Exec srun -l -n 4 --export=ALL numabind_core_slurm" -export POSTRUN="time " +export POSTRUN="echo " cd $SRC_MESONH/MY_RUN/KTEST/003_KW78 make -k diff --git a/src/job_make_examples_BullX_occigen b/src/job_make_examples_BullX_occigen index b5f60e5f497a312918e32ff519ac0f883eccdddf..9952bcf9486133b25cd9f5e74d26e14af3fbcfc1 100755 --- a/src/job_make_examples_BullX_occigen +++ b/src/job_make_examples_BullX_occigen @@ -18,10 +18,10 @@ set -x # Nom de la machine hostname -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O2 export MONORUN="Mpirun -prepend-rank -np 1 " export MPIRUN="Mpirun -prepend-rank -np 4 " -export POSTRUN="time " +export POSTRUN="echo " cd $SRC_MESONH/MY_RUN/KTEST/003_KW78 make -k diff --git a/src/job_make_examples_BullX_olympe b/src/job_make_examples_BullX_olympe index d0c38777382dcbab8a12396a468a46c1ab732dd0..06c0e0d595416ce2994eed3a9b6d6421b34930a7 100755 --- a/src/job_make_examples_BullX_olympe +++ b/src/job_make_examples_BullX_olympe @@ -17,10 +17,10 @@ set -x # Nom de la machine hostname -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O2 export MONORUN="mpirun -prepend-rank -np 1 " export MPIRUN="mpirun -prepend-rank -np 4 " -export POSTRUN="time " +export POSTRUN="echo " cd $SRC_MESONH/MY_RUN/KTEST/003_KW78 make -k diff --git a/src/job_make_examples_CRAY_cca b/src/job_make_examples_CRAY_cca index f4c87e365bc013585f8f1f738e68128bf72762ac..54c9a164718efb5d59ce26c430c230926730c0f1 100755 --- a/src/job_make_examples_CRAY_cca +++ b/src/job_make_examples_CRAY_cca @@ -28,7 +28,7 @@ cd ${PBS_O_WORKDIR} ARCH=LXifort #ARCH=LXcray -. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-2-MPICRAY-O2 +. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-3-MPICRAY-O2 export MONORUN="aprun -n 1 " diff --git a/src/job_make_examples_IBM_ada b/src/job_make_examples_IBM_ada index 43e1d73e003014dfaec460bb66a9a7af339446de..6b7efd0de14094d62506ccc6bef16a61e40efc59 100755 --- a/src/job_make_examples_IBM_ada +++ b/src/job_make_examples_IBM_ada @@ -19,7 +19,7 @@ cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O2 # Pour avoir l'echo des commandes set -x diff --git a/src/job_make_examples_IBM_sp6_vargas b/src/job_make_examples_IBM_sp6_vargas index 8305c3663166ae8de3a6d8c1a530a6212ca4eaca..daaf5d3f5f24a5e6a9b02cf1689ea4084eff23d0 100755 --- a/src/job_make_examples_IBM_sp6_vargas +++ b/src/job_make_examples_IBM_sp6_vargas @@ -24,7 +24,7 @@ set -x cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-3-MPIAUTO-O2 #001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier diff --git a/src/job_make_examples_NEC_SX8 b/src/job_make_examples_NEC_SX8 index fb3a805c0b146a3298f317bb36a053da853fe468..ec4067cdd7726551bdf4dd7a1a5eace7d37693e0 100755 --- a/src/job_make_examples_NEC_SX8 +++ b/src/job_make_examples_NEC_SX8 @@ -18,7 +18,7 @@ hostname [ -d $PBS_O_WORKDIR ] && cd $PBS_O_WORKDIR # -. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O4 +. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-3-MPIAUTO-O4 export MONORUN="Mpirun -np 1 " export MPIRUN="Mpirun -np 2 " diff --git a/src/job_make_examples_SX8 b/src/job_make_examples_SX8 index de30324180c9cfed2e7d48a28b12cd9304dc6c2c..19893d36c3c7036b8394e135dbaf45954ccdb925 100755 --- a/src/job_make_examples_SX8 +++ b/src/job_make_examples_SX8 @@ -19,7 +19,7 @@ hostname [ -d $PBS_O_WORKDIR ] && cd $PBS_O_WORKDIR # -. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-3-MPIAUTO-O2 export MONORUN="Mpirun -np 1 " export MPIRUN="Mpirun -np 2 " diff --git a/src/job_make_examples_cxa b/src/job_make_examples_cxa index f27bea4fbabebbee2a9f2db0497c3428187da7bf..53dc47aed3a98c74f3662b6f78c5117f41ff6d11 100755 --- a/src/job_make_examples_cxa +++ b/src/job_make_examples_cxa @@ -34,7 +34,7 @@ echo SHELL=$SHELL cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-3-MPIAUTO-O2 ulimit -c 0 # pas de core diff --git a/src/job_make_mesonh_BG b/src/job_make_mesonh_BG index 5b7a12e9d58ea8d185774eece6ce8486e64066d3..f239dcf20ffb3f4a972e9ec538f75d118ce24f7d 100755 --- a/src/job_make_mesonh_BG +++ b/src/job_make_mesonh_BG @@ -18,7 +18,7 @@ set -x cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-3-MPIAUTO-O2 #time gmake time gmake -r -j8 diff --git a/src/job_make_mesonh_BGQ b/src/job_make_mesonh_BGQ index 6a8dd4cd7866686189d88ce096466b5229767307..fc3efc0117fe7b30c6ed198c9e17899b26852b87 100755 --- a/src/job_make_mesonh_BGQ +++ b/src/job_make_mesonh_BGQ @@ -34,7 +34,7 @@ set -x cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-2-MPIAUTO-O2NAN +. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-3-MPIAUTO-O2NAN case $LOADL_STEP_NAME in diff --git a/src/job_make_mesonh_BullX b/src/job_make_mesonh_BullX index 0af2e224427ab5a5873e8a65c32e6d52186e746c..96a3af99022bc50f7e41bc929091bbc9c4726112 100755 --- a/src/job_make_mesonh_BullX +++ b/src/job_make_mesonh_BullX @@ -19,7 +19,7 @@ set -x # On va lancer la compilation dans le répertoire de lancement du job pwd -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O3 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O3 time gmake -j 4 time gmake -j 1 installmaster diff --git a/src/job_make_mesonh_CRAY_cca b/src/job_make_mesonh_CRAY_cca index 1b4de21e1cb8b98a69e7e06b20a2d95590afef7a..44d5a607b2cf6b4e1aac6710f4d6158280dd1a9c 100755 --- a/src/job_make_mesonh_CRAY_cca +++ b/src/job_make_mesonh_CRAY_cca @@ -21,7 +21,7 @@ pwd ARCH=LXifort #ARCH=LXcray -. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-2-MPICRAY-O2 +. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-3-MPICRAY-O2 time gmake -j 4 2>&1 | tee sortie_compile_${ARCH}.$$ time gmake -j 4 2>&1 | tee sortie_compile_${ARCH}2.$$ diff --git a/src/job_make_mesonh_IBM_ada b/src/job_make_mesonh_IBM_ada index 4d64ed118d6792c9582d6ae47500e5dc1d14af48..d2eec06db352d72438706c6cbbb03ce6b2d655aa 100755 --- a/src/job_make_mesonh_IBM_ada +++ b/src/job_make_mesonh_IBM_ada @@ -16,7 +16,7 @@ cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-MPIINTEL-O2 # Pour avoir l'echo des commandes set -x diff --git a/src/job_make_mesonh_IBM_sp6_vargas b/src/job_make_mesonh_IBM_sp6_vargas index e8f11ad2743ab1306334ca7dca7c86c934f88cae..311f8acb189cc30e797cb96cfdf3b959dc874b24 100755 --- a/src/job_make_mesonh_IBM_sp6_vargas +++ b/src/job_make_mesonh_IBM_sp6_vargas @@ -24,7 +24,7 @@ set -x cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-3-MPIAUTO-O2 time gmake -j1 gribapi time gmake -r -j8 diff --git a/src/job_make_mesonh_MFSX8 b/src/job_make_mesonh_MFSX8 index c1e15619bbad5f99d0e9f9e531ebd76523d5f872..707d71f973c4413086295a439e7e4014d956d36c 100644 --- a/src/job_make_mesonh_MFSX8 +++ b/src/job_make_mesonh_MFSX8 @@ -12,7 +12,7 @@ set -x # On va lancer la compilation dans le répertoire de lancement du job [ ${PBS_O_WORKDIR} ] && cd ${PBS_O_WORKDIR} -. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O4 +. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-3-MPIAUTO-O4 time gmake -j 4 ########## compile on four processors to speedup the compilation time gmake -j 1 installmaster diff --git a/src/job_make_mesonh_NEC_SX8 b/src/job_make_mesonh_NEC_SX8 index d8664fc0532a4602f35a951005a2fe7e94ae3da4..651fe30a7f9fe2a8759254c93a944c9c2a4605ea 100755 --- a/src/job_make_mesonh_NEC_SX8 +++ b/src/job_make_mesonh_NEC_SX8 @@ -11,7 +11,7 @@ set -x # On va lancer la compilation dans le répertoire de lancement du job [ $PBS_O_WORKDIR ] && cd $PBS_O_WORKDIR -. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O4 +. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-3-MPIAUTO-O4 time gmake -j 4 time gmake -j 4 # some time problem with first pass in parallel compilation diff --git a/src/job_make_mesonh_cxa b/src/job_make_mesonh_cxa index ad5b3a85872bff807991682be89249424f23f0b5..88de08f162975a58f3bb0c415e3100f7df5994f3 100755 --- a/src/job_make_mesonh_cxa +++ b/src/job_make_mesonh_cxa @@ -27,7 +27,7 @@ set -x cd $LOADL_STEP_INITDIR -. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2 +. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-3-MPIAUTO-O2 time gmake -r -j1 time gmake installmaster diff --git a/src/job_make_mesonh_user_BullX b/src/job_make_mesonh_user_BullX index 324daaf557e995b4e560308a52b1b820d30cad6e..3c044c434ea4f265761de5ea0ed052ac22e118f2 100755 --- a/src/job_make_mesonh_user_BullX +++ b/src/job_make_mesonh_user_BullX @@ -19,7 +19,7 @@ export VER_USER= ########## Your own USER Directory set -x # On va lancer la compilation dans le répertoire de lancement du job -. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-${VER_USER}-MPIINTEL-O3 +. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-3-${VER_USER}-MPIINTEL-O3 time gmake user time gmake -j 1 installuser diff --git a/src/job_make_mesonh_user_MFSX8 b/src/job_make_mesonh_user_MFSX8 index 407073d7ec4a6023b5a6b2aab6df09d375e2cadc..2ddfd3f4eb41645c5767fe9860fac592a1400443 100644 --- a/src/job_make_mesonh_user_MFSX8 +++ b/src/job_make_mesonh_user_MFSX8 @@ -14,7 +14,7 @@ set -x [ ${PBS_O_WORKDIR} ] && cd ${PBS_O_WORKDIR} -. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-${VER_USER}-MPIAUTO-O4 +. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-3-${VER_USER}-MPIAUTO-O4 time gmake user time gmake -j 1 installuser