diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index f84db2c5449b4a57eee086c4ff226e0af0e05c51..7a5d0aeaa27e28eb43e4424e4377687cf16ad143 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -864,12 +864,12 @@ IF (LOCEAN) THEN ZIZOCE(IKU) = XSSOLA_T(JSW+1)*(1.-ZSWA)+XSSOLA_T(JSW+2)*ZSWA ZPROSOL1(IKU) = CST%XROC*ZIZOCE(IKU) ZPROSOL2(IKU) = (1.-CST%XROC)*ZIZOCE(IKU) - IF(NVERB >= 5 ) THEN +! IF(NVERB >= 5 ) THEN ! WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,& ! TDTCUR%xtime, XTSTEP, ZSFTH(2,2), ZSFU(2,2),ZSFV(2,2),ZIZOCE(IKU) - WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', & - XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2) - END IF +! WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', & +! XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2) +! END IF if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) DO JKM=IKU-1,2,-1 ZPROSOL1(JKM) = ZPROSOL1(JKM+1)* exp(-XDZZ(2,2,JKM)/CST%XD1) diff --git a/src/mesonh/ext/prep_ideal_case.f90 b/src/mesonh/ext/prep_ideal_case.f90 index 4c75d28867748edb08ee6990aae3a259febb3e9a..3a340fe6f0ce0330b6727c223f8c1b89204fad26 100644 --- a/src/mesonh/ext/prep_ideal_case.f90 +++ b/src/mesonh/ext/prep_ideal_case.f90 @@ -341,6 +341,7 @@ USE MODD_PGDDIM USE MODD_PGDGRID USE MODD_TIME USE MODD_TIME_n +USE MODD_PARAM_ICE, ONLY: PARAM_ICE_ASSOCIATE USE MODD_REF USE MODD_REF_n USE MODD_LUNIT @@ -653,7 +654,7 @@ CALL INI_NEB !* 2.1 For variables in DESFM file ! CALL ALLOC_FIELD_SCALARS() -! +CALL PARAM_ICE_ASSOCIATE() CALL DEFAULT_DESFM_n(1) ! CSURF = "NONE" diff --git a/src/mesonh/ext/prep_real_case.f90 b/src/mesonh/ext/prep_real_case.f90 new file mode 100644 index 0000000000000000000000000000000000000000..01b3b16db84189f7722de5771b398d9bcd50f45d --- /dev/null +++ b/src/mesonh/ext/prep_real_case.f90 @@ -0,0 +1,1421 @@ +!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ###################### + PROGRAM PREP_REAL_CASE +! ###################### +! +!!**** *PREP_REAL_CASE* - program to write an initial FM file from real case +!! situation. +!! +!! PURPOSE +!! ------- +!! +!! The purpose of this program is to prepare an initial meso-NH file +!! (LFIFM and DESFM files) filled by some fields of a real situation. +!! General data are given by the MESO-NH user in the namelist file +!! 'PRE_REAL1.nam'. The fields are obtained from three sources: +!! - an atmospheric input file, which can be: +!! * an Aladin file, itself obtained from an Arpege file with +!! the Aladin routine "FULLPOS". +!! * a grib file (ECMWF, Grib Arpege or Grib Aladin) +!! * a MESONH file +!! - an physiographic data file. +!! +!! 1) Fields obtained from the Atmospheric file: +!! ----------------------------------------- +!! +!! - the projection parameters (checked with PGD file): +!! reference latitude and longitude +!! parameter of projection +!! angle of rotation of the domain +!! +!! - the horizontal grid definition (checked with PGD file): +!! grid mesh +!! latitude and longitude of the reference point +!! (with data from PRE_REAL1.nam) +!! +!! - thermodynamical 3D and 2D fields: +!! potential temperature +!! vapor mixing ratio +!! +!! - dynamical fields: +!! three components of the wind +!! +!! - reference anelastic state variables: +!! profile of virtual potential temperature +!! profile of dry density +!! Exner function at model top +!! +!! - total dry air mass +!! +!! +!! 2) Fields obtained from the physiographic data file: +!! ------------------------------------------------ +!! +!! - the projection parameters: +!! reference latitude and longitude +!! parameter of projection +!! angle of rotation of the domain +!! +!! - the horizontal grid definition: +!! grid mesh +!! latitude and longitude of the reference point +!! (with data from PRE_REAL1.nam) +!! - physiografic fields: (orographic, vegetation, soil and radiation fields) +!! +!! +!! 3) Data obtained from the namelist file PRE_REAL1.nam: +!! -------------------------------------------------- +!! +!! - type of equations system +!! - vertical grid definition +!! - number of points in x and y directions +!! - level of verbosity +!! - name of the different files +!! +!! +!!** METHOD +!! ------ +!! In this program, once the MESO-NH domain is calculated, all the +!! 2D or 3D fields are computed on the MESO-NH horizontal domain WITH +!! the external points. This is particularly important for the large +!! scale fields during the MESO-NH run. +!! +!! 1) The following PREP_REAL_CASE program: +!! +!! - set default values for global variables which will be written in +!! DESFM file (by calling DEFAULT_DESFM1); lateral boundary conditions +!! are open. +!! +!! - opens the different files (by calling OPEN_PRC_FILES). +!! +!! - initializes physical constants (by calling INI_CST). +!! +!! - initializes the horizontal domain from the data read in the +!! descriptive part of the Aladin file and the directives read in the +!! namelist file (routines READ_GENERAL and SET_SUBDOMAIN in +!! READ_ALL_DATA). This MESO-NH domain is a part of the Aladin domain. +!! +!! - initializes global variables from namelists and the MESO-NH +!! vertical grid definition variables in the namelist file +!! (routine READ_VER_GRID). +!! +!! - initializes the physiographic 2D fields from the physiographic data +!! file, in particular the MESO-NH orography. +!! +!! - reads the 3D and 2D variable fields in the Grib file +!! (routine READ_ALL_DATA_GRIB_CASE), +!! if HATMFILETYPE='GRIBEX': +!! absolute temperature +!! specific humidity +!! horizontal contravariant wind +!! surface pressure +!! large scale orography +!! +!! - reads the 3D and 2D variable fields in the input MESONH file +!! (routine READ_ALL_DATA_MESONH_CASE), if HATMFILETYPE='MESONH': +!! potential temperature +!! vapor mixing ratio +!! horizontal wind +!! other mixing ratios +!! turbulence prognostic and semi-prognostic variables +!! large scale orography +!! +!! - computes some geometric variables (routines SM_GRIDPROJ and METRICS), +!! in particular: +!! * altitude 3D array +!! * metric coefficients +!! * jacobian +!! +!! - initializes MESO-NH thermodynamical fields: +!! * changes of variables (routine VER_PREP_mmmmmm_CASE): +!! absolute temperature --> virtual potential temperature +!! specific humidity --> vapor mixing ratio +!! * interpolates/extrapolates the fields from the large scale +!! orography to the MESO-NH one (routine VER_INT_THERMO in +!! VER_THERMO, by using a shifting function method). +!! in water vapor case, the interpolations are always performed +!! on relative humidity. +!! * the pressure is computed on each grid by integration of the +!! hydrostatic equation from bottom or top. When input atmospheric +!! file is a MESO-NH one, information about the difference between +!! hydrostatic pressure and total pressure is kept and interpolated +!! during the entire PREP_REAL_CASE process. +!! * interpolates the fields to the MESO-NH vertical grid +!! (also by routine VER_INT_THERMO in VER_THERMO). +!! * computes the potential temperature (routine VER_THERMO). +!! * sets to zero the mixing ratios, except the vapor mixing ratio +!! (VER_THERMO). +!! +!! - initializes the reference anelastic state variables (routine SET_REFZ +!! in VER_THERMO). +!! +!! - computes the total dry air mass (routine DRY_MASS in VER_THERMO). +!! +!! - initializes MESO-NH dynamical variables: +!! * changes Aladin contravariant wind into true horizontal wind +!! (in subroutine VER_PREP). +!! * interpolates/extrapolates the momentum from the large scale +!! orography to the MESO-NH one (routine VER_INT_DYN in +!! VER_DYN, by using a shifting function method). +!! * interpolates the fields to the MESO-NH vertical grid +!! (also by routine VER_INT_DYN in VER_DYN). The fields +!! are located on a horizontal Arakawa A-grid, as the Aladin fields. +!! * The momentum is interpolated to the Arakawa C-grid +!! (routine VER_DYN). +!! * A first guess of the vertical momentum, verifying the +!! uncompressible continuity equation and the material lower boundary +!! condition against the ground, is computed (routine WGUESS). +!! * computes the final non-divergent wind field (routine +!! ANEL_BALANCE). +!! +!! - copies the interpolated fields also at t-dt and in the large scale +!! fields (routine INI_PROG_VAR). +!! +!! - writes the DESFM and LFIFM files (routines WRITE_DESFM1 and +!! WRITE_LFIFM1). +!! +!! +!! 2) Some conventions are used in this program and its subroutines because +!! of the number of different grids and fields: +!! +!! - subscripts: +!! * the subscripts I and J are used for all the horizontal grid. +!! * the subcript K is used for the MESO-NH vertical grid (increasing +!! from bottom to top). +!! * the subscript L is used for the Aladin or input Mesonh grids +!! (increasing from bottom to top). +!! +!! - suffixes: +!! * _LS: +!! If used for a geographic or horizontal grid definition variable, +!! this variable is connected to the large horizontal domain. +!! If used for a surface variable, this variable corresponds to +!! the large scale orography, and therefore will be modified. +!! If used for another variable, this variable is discretized +!! on the Aladin or input MESONH file vertical grid +!! (large-scale orography with input vertical discretization, +!! either coming from eta levels or input Gal-Chen grid). +!! * _MX: +!! Such a variable is discretized on the mixed grid. +!! (large-scale orography with output Gal-Chen vertical grid +!! discretization) +!! * _SH: +!! Such a variable is discretized on the shifted grid. +!! (fine orography with a shifted vertical grid, NOT Gal-Chen) +!! * no suffix: +!! The variable is discretized on the MESO-NH grid. +!! (fine orography with output Gal-Chen vertical grid discretization) +!! +!! - additional pre-suffixes: (for pressure, Exner and altitude fields) +!! * MASS: +!! The variable is discretized on a mass point +!! * FLUX: +!! The variable is discretized on a flux point +!! +!! +!! - names of variables: for a physical variable VAR: +!! * pVARs is the variable itself. +!! * pRHODVARs is the variable multiplied by the dry density rhod. +!! * pRHODJVARs is the variable multiplied by the dry density rhod +!! and the Jacobian. +!! * pRVARs is the variable multiplied by rhod_ref, the anelastic +!! reference state dry density and the Jacobian. +!! where p and s are the appropriate prefix and suffix. +!! +!! - allocation of arrays: the arrays are allocated +!! * just before their initialization for the general arrays stored in +!! modules. +!! * in the subroutine in which they are declared for the local arrays +!! in a subroutine. +!! * in the routine in which they are initialized for the arrays +!! defined in the monitor PREP_REAL_CASE. In this case they are in +!! fact passed as pointer to the subroutines to allow their +!! dynamical allocation (exception which confirms the rule: ZJ). +!! +!! +!! EXTERNAL +!! -------- +!! +!! Routine DEFAULT_DESFM1 : to set default values for variables which can be +!! contained in DESFM file. +!! Routine OPEN_PRC_FILES: to open all files. +!! Routine INI_CST : to initialize physical constants. +!! Routine READ_ALL_DATA_GRIB_CASE : to read all input data. +!! Routine READ_ALL_DATA_MESONH_CASE : to read all input data. +!! Routine SM_GRIDPROJ : to compute some grid variables, in case of +!! conformal projection. +!! Routine METRICS : to compute metric coefficients. +!! Routine VER_PREP_GRIBEX_CASE : to prepare the interpolations. +!! Routine VER_PREP_MESONH_CASE : to prepare the interpolations. +!! Routine VER_THERMO : to perform the interpolation of thermodynamical +!! variables. +!! Routine VER_DYN : to perform the interpolation of dynamical +!! variables. +!! Routine INI_PROG_VAR : to initialize the prognostic varaibles not yet +!! initialized +!! Routine WRITE_DESFM1 : to write a DESFM file. +!! Routine WRITE_LFIFM1 : to write a LFIFM file. +!! Routine IO_File_close : to close a FM-file (DESFM + LFIFM). +!! +!! Module MODE_GRIDPROJ : contains conformal projection routines +!! +!! Module MODI_DEFAULT_DESFM1 : interface module for routine DEFAULT_DESFM1 +!! Module MODI_OPEN_PRC_FILES : interface module for routine OPEN_PRC_FILES +!! Module MODI_READ_ALL_DATA_MESONH_CASE : interface module for routine +!! READ_ALL_DATA_MESONH_CASE +!! Module MODI_METRICS : interface module for routine METRICS +!! Module MODI_VER_PREP_GRIBEX_CASE : interface module for routine +!! VER_PREP_GRIBEX_CASE +!! Module MODI_VER_PREP_MESONH_CASE : interface module for routine +!! VER_PREP_MESONH_CASE +!! Module MODI_VER_THERMO : interface module for routine VER_THERMO +!! Module MODI_VER_DYN : interface module for routine VER_DYN +!! Module MODI_INI_PROG_VAR : interface module for routine INI_PROG_VAR +!! Module MODI_WRITE_DESFM1 : interface module for routine WRITE_DESFM1 +!! Module MODI_WRITE_LFIFM1 : interface module for routine WRITE_LFIFM1 +!! +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! Module MODD_CONF : contains configuration variables for all models. +!! NVERB : verbosity level for output-listing +!! Module MODD_CONF1 : contains configuration variables for model 1. +!! NRR : number of moist variables +!! Module MODD_LUNIT : contains logical unit and names of files. +!! Module MODD_LUNIT : contains logical unit and names of files (model1). +!! CINIFILE: name of the FM file which will be used for the MESO-NH run. +!! Module MODD_GRID1 : contains grid variables. +!! XLAT : latitude of the grid points +!! XLON : longitudeof the grid points +!! XXHAT : position xhat in the conformal plane +!! XYHAT : position yhat in the conformal plane +!! XDXHAT : horizontal local meshlength on the conformal plane +!! XDYHAT : horizontal local meshlength on the conformal plane +!! XZS : MESO-NH orography +!! XZZ : altitude +!! XZHAT : height zhat +!! XMAP : map factor +!! Module MODD_LBC1 : contains declaration of lateral boundary conditions +!! CLBCX : X-direction LBC type at left(1) and right(2) boundaries +!! CLBCY : Y-direction LBC type at left(1) and right(2) boundaries +!! Module MODD_PARAM1 : contains declaration of the parameterizations' names +!! +!! REFERENCE +!! --------- +!! +!! Book 2 +!! +!! AUTHOR +!! ------ +!! +!! V.Masson Meteo-France +!! +!! MODIFICATIONS +!! ------------- +!! Original 01/01/95 +!! Sept. 21, 1995 (J.Stein and V.Masson) surface pressure +!! Jan. 09, 1996 (V. Masson) pressure function deduced from +!! hydrostatic pressure +!! Jan. 31, 1996 (V. Masson) possibility to initialize +!! atmospheric fields from MESONH file +!! Mar. 18, 1996 (V. Masson) new vertical extrapolation of Ts +!! in case of initialization with MESONH file +!! Apr 17, 1996 (J. Stein ) change the DEFAULT_DESFM CALL +!! May 25, 1996 (V. Masson) Variable CSTORAGE_TYPE +!! Aug 26, 1996 (V. Masson) Only thinshell approximation is +!! currently available. +!! Sept 24, 1996 (V. Masson) add writing of varaibles for +!! nesting ('DAD_NAME', 'DXRATIO', 'DYRATIO') +!! Oct 11, 1996 (V. Masson) L1D and L2D configurations +!! Oct 28, 1996 (V. Masson) add deallocations and NVERB +!! default set to 1 +!! Dec 02, 1996 (V. Masson) vertical interpolation of +!! surface fields in aladin case +!! Dec 12, 1996 (V. Masson) add LS vertical velocity +!! Jan 16, 1997 (J. Stein) Durran's anelastic system +!! May 07, 1997 (V. Masson) add LS tke +!! Jun 27, 1997 (V. Masson) add absolute pressure +!! Jul 09, 1997 (V. Masson) add namelist NAM_REAL_CONF +!! Jul 10, 1997 (V. Masson) add LS epsilon +!! Aug 25, 1997 (V. Masson) add computing time analysis +!! Jan 20, 1998 (J. Stein) add LB and LS fields +!! Apr, 30, 1998 (V. Masson) Large scale VEG and LAI +!! Jun, 04, 1998 (V. Masson) Large scale D2 and Aladin ISBA +!! files +!! Jun, 04, 1998 (V. Masson) Add new soil interface var. +!! Jan 20, 1999 (J. Stein) add a Boundaries call +!! March 15 1999 (J. Pettre, V. Bousquet and V. Masson) +!! initialization from GRIB files +!! Jul 2000 (F.solmon/V.Masson) Adaptation for patch +!! according to GRIB or MESONH case +!! Nov 22, 2000 (P.Tulet, I. Mallet) initialization +!! from GRIB MOCAGE file +!! Fev 01, 2001 (D.Gazen) add module MODD_NSV for NSV variable +!! Jul 02, 2001 (J.Stein) add LCARTESIAN case +!! Oct 15, 2001 (I.Mallet) allow namelists in different orders +!! Dec 2003 (V.Masson) removes surface calls +!! Jun 01, 2002 (O.Nuissier) filtering of tropical cyclone +!! Aou 09, 2005 (D.Barbary) add CDADATMFILE CDADBOGFILE +!! May 2006 Remove KEPS +!! Feb 02, 2012 (C. Mari) interpolation from MOZART +!! add call to READ_CHEM_NETCDF_CASE & +!! VER_PREP_NETCDF_CASE +!! Mar 2012 Add NAM_NCOUT for netcdf output +!! July 2013 (Bosseur & Filippi) Adds Forefire +!! Mars 2014 (J.Escobar) Missing 'full' UPDATE_METRICS for arp2lfi // run +!! April 2014 (G.TANGUY) Add LCOUPLING +!! 2014 (M.Faivre) +!! Fevr 2015 (M.Moge) Cleaning up +!! Aug 2015 (M.Moge) removing EXTRAPOL on XDXX and XDYY in part 8 +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! M.Leriche 2015 : add LUSECHEM dans NAM_CH_CONF +!! Feb 02, 2012 (C. Mari & BV) interpolation from CAMS +!! add call to READ_CAMS_NETCDF_CASE & +!! VER_PREP_NETCDF_CASE +!! Modification 01/2016 (JP Pinty) Add LIMA +!! Modification 02/2016 (JP Pinty) Convert CAMS mix ratio to nbr conc +! +!! 06/2016 (G.Delautier) phasage surfex 8 +!! P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define +!! B.VIE 2016 : LIMA +!! Philippe 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 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables +! S. Bielli 02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes +! P. Wautelet 20/03/2019: missing use MODI_INIT_SALT +! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! T.Nagel 02/2021: add IBM +! P. Wautelet 06/07/2021: use FINALIZE_MNH +!! M. Leriche 26/01/2022: add reading of CAMS reanalysis for chemistry +!! and/or for LIMA +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CH_M9_n +USE MODD_CH_MNHC_n, ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM +USE MODD_CONF +USE MODD_CONF_n +USE MODD_CST +USE MODD_DIM_n +!UPG*PT +USE MODD_CH_AEROSOL +USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN,& + LDSTCAMS +!UPG*PT + +USE MODD_DYN_n, CPRESOPT_n=>CPRESOPT, LRES_n=>LRES, XRES_n=>XRES , NITR_n=>NITR +USE MODD_FIELD_n +USE MODD_GR_FIELD_n +USE MODD_GRID +USE MODD_GRID_n +USE MODD_HURR_CONF +USE MODD_IBM_LSF, ONLY: CIBM_TYPE, LIBM_LSF, NIBM_SMOOTH, XIBM_SMOOTH +USE MODD_IBM_PARAM_n, ONLY: XIBM_LS +USE MODD_IO, ONLY: TFILEDATA, TFILE_SURFEX +USE MODD_LBC_n +USE MODD_LSFIELD_n +USE MODD_LUNIT, ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE +USE MODD_LUNIT_n, ONLY: CINIFILE,TINIFILE,TLUOUT +USE MODD_METRICS_n +USE MODD_MNH_SURFEX_n +USE MODD_NESTING +USE MODD_NSV +USE MODD_PARAMETERS +USE MODD_PARAM_n +USE MODD_PARAM_ICE, ONLY: PARAM_ICE_ASSOCIATE +USE MODD_PREP_REAL +USE MODD_REF_n +!UPG*PT +USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT,& + LSLTCAMS +USE MODD_CH_AERO_n, ONLY: XM3D, XRHOP3D, XSIG3D, XRG3D, XN3D, XCTOTA3D +!UPG*PT +USE MODD_TURB_n +! +USE MODE_EXTRAPOL +use mode_field, only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars +USE MODE_FINALIZE_MNH, only: FINALIZE_MNH +USE MODE_GRIDCART +USE MODE_GRIDPROJ +USE MODE_IO, only: IO_Init +USE MODE_IO_FIELD_READ, only: IO_Field_read +USE MODE_IO_FIELD_WRITE, only: IO_Header_write +USE MODE_IO_FILE, only: IO_File_close, IO_File_open +USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname +USE MODE_ll +USE MODE_MODELN_HANDLER +USE MODE_MPPDB +USE MODE_MSG +USE MODE_POS +USE MODE_SPLITTINGZ_ll +! +USE MODI_BOUNDARIES +USE MODI_COMPARE_DAD +USE MODI_DEALLOCATE_MODEL1 +USE MODI_DEALLOC_PARA_LL +USE MODI_DEFAULT_DESFM_n +USE MODI_ERROR_ON_TEMPERATURE +USE MODI_IBM_INIT_LS +USE MODI_INI_PROG_VAR +USE MODI_INIT_SALT +USE MODI_LIMA_MIXRAT_TO_NCONC +USE MODI_METRICS +USE MODI_MNHREAD_ZS_DUMMY_n +USE MODI_MNHWRITE_ZS_DUMMY_n +USE MODI_OPEN_PRC_FILES +USE MODI_PREP_SURF_MNH +USE MODI_PRESSURE_IN_PREP +USE MODI_READ_ALL_DATA_GRIB_CASE +USE MODI_READ_ALL_DATA_MESONH_CASE +USE MODI_READ_ALL_NAMELISTS +!UPG*PT +!USE MODI_READ_CAMS_DATA_NETCDF_CASE +!USE MODI_READ_CHEM_DATA_NETCDF_CASE +USE MODI_READ_CHEM_DATA_MOZART_CASE +USE MODI_READ_CHEM_DATA_CAMS_CASE +USE MODI_READ_LIMA_DATA_NETCDF_CASE +USE MODI_AER2LIMA +USE MODI_CH_AER_EQM_INIT_n +!UPG*PT +USE MODI_READ_VER_GRID +USE MODI_SECOND_MNH +USE MODI_SET_REF +USE MODI_UPDATE_METRICS +USE MODI_VER_DYN +USE MODI_VER_PREP_GRIBEX_CASE +USE MODI_VER_PREP_MESONH_CASE +USE MODI_VER_PREP_NETCDF_CASE +USE MODI_VERSION +USE MODI_VER_THERMO +USE MODI_WRITE_DESFM_n +USE MODI_WRITE_LFIFM_n +! +USE MODN_CONF, ONLY: JPHEXT , NHALO +USE MODN_CONFZ +USE MODN_PARAM_LIMA +! +IMPLICIT NONE +! +!* 0.1 Declaration of local variables +! ------------------------------ +! +CHARACTER(LEN=28) :: YATMFILE ! name of the Atmospheric file +CHARACTER(LEN=6) :: YATMFILETYPE! type of the Atmospheric file +CHARACTER(LEN=28) :: YCHEMFILE ! name of the Chemical file +CHARACTER(LEN=6) :: YCHEMFILETYPE! type of the Chemical file +!UP*PT +!CHARACTER(LEN=28) :: YCAMSFILE ! name of the input CAMS file +!CHARACTER(LEN=6) :: YCAMSFILETYPE! type of the input CAMS file +CHARACTER(LEN=28) :: YLIMAFILE ! name of the input MACC file +CHARACTER(LEN=6) :: YLIMAFILETYPE! type of the input MACC file +!UP*PT +CHARACTER(LEN=28) :: YSURFFILE ! name of the Surface file +CHARACTER(LEN=6) :: YSURFFILETYPE! type of the Surface file +CHARACTER(LEN=28) :: YPGDFILE ! name of the physiographic data +! ! file +! +CHARACTER(LEN=28) :: YDAD_NAME ! true name of the atmospheric file +! +!* other variables +! +REAL,DIMENSION(:,:,:), ALLOCATABLE:: ZJ ! Jacobian +! +!* file management variables and counters +! +INTEGER :: ILUOUT0 ! logical unit for listing file +INTEGER :: IPRE_REAL1 ! logical unit for namelist file +INTEGER :: IRESP ! return code in FM routines +LOGICAL :: GFOUND ! Return code when searching namelist +INTEGER :: NIU,NJU,NKU ! Upper bounds in x,y,z directions +! +REAL :: ZSTART, ZEND, ZTIME1, ZTIME2, ZTOT, ZALL ! for computing time analysis +REAL :: ZMISC, ZREAD, ZHORI, ZPREP, ZSURF, ZTHERMO, ZDYN, ZDIAG, ZWRITE +REAL :: ZDG ! diagnostics time in routines +INTEGER :: IINFO_ll ! return code of // routines +! Namelist model variables +CHARACTER(LEN=5) :: CPRESOPT +INTEGER :: NITR +LOGICAL :: LRES +REAL :: XRES +LOGICAL :: LSHIFT ! flag to perform vertical shift or not. +LOGICAL :: LDUMMY_REAL ! flag to read and interpolate + !dummy fields from GRIBex file +INTEGER :: JRR ! loop counter for moist var. +LOGICAL :: LUSECHAQ +LOGICAL :: LUSECHIC +LOGICAL :: LUSECHEM +INTEGER :: JN +! +TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL() +! +! +!* 0.3 Declaration of namelists +! ------------------------ +! +NAMELIST/NAM_REAL_CONF/ NVERB, CEQNSYS, CPRESOPT, LSHIFT, LDUMMY_REAL, & + LRES, XRES, NITR,LCOUPLING, NHALO , JPHEXT +! Filtering and balancing of the large-scale and radar tropical cyclone +NAMELIST/NAM_HURR_CONF/ LFILTERING, CFILTERING, & +XLAMBDA, NK, XLATGUESS, XLONGUESS, XBOXWIND, XRADGUESS, NPHIL, NDIAG_FILT, & +NLEVELR0,LBOGUSSING, & +XLATBOG, XLONBOG, XVTMAXSURF, XRADWINDSURF, & +XMAX, XC, XRHO_Z, XRHO_ZZ, XB_0, XBETA_Z, XBETA_ZZ,& +XANGCONV0, XANGCONV1000, XANGCONV2000, & + CDADATMFILE, CDADBOGFILE + NAMELIST/NAM_AERO_CONF/ LORILAM, LINITPM, LDUST, XINIRADIUSI, XINIRADIUSJ,& + XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, CRGUNITD,& + LSALT, CRGUNITS, NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,& +!UPG*PT + XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, NMODE_SLT, & + LDSTCAMS, LSLTCAMS,CACTCCN,CCLOUD, NMOD_IFN, NMOD_CCN +!UPG*PT + +NAMELIST/NAM_CH_CONF/ LUSECHAQ,LUSECHIC,LUSECHEM +! +NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH +! +! name of dad of input FM file +INTEGER :: II, IJ, IGRID, ILENGTH +CHARACTER (LEN=100) :: HCOMMENT +TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange +!UPG*PT +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXRHO, ZLBYRHO +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXZZ, ZLBYZZ +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXPABST, ZLBYPABST +INTEGER :: ILBX,ILBY,IIB,IJB,IIE,IJE +!UPG*PT + +!------------------------------------------------------------------------------- +! +CALL MPPDB_INIT() +! +CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) +! +ZDIAG = 0. +CALL SECOND_MNH (ZSTART) +! +ZHORI = 0. +ZSURF = 0. +ZTIME1 = ZSTART +! +!* 1. SET DEFAULT VALUES +! ------------------ +! +CALL VERSION +CPROGRAM='REAL ' +! +CALL ALLOC_FIELD_SCALARS() +CALL PARAM_ICE_ASSOCIATE() +CALL DEFAULT_DESFM_n(1) +NRR=1 +IDX_RVT = 1 +! +!------------------------------------------------------------------------------- +! +!* 2. OPENNING OF THE FILES +! --------------------- +CALL IO_Init() +! +CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE & + ,YCHEMFILE,YCHEMFILETYPE & + ,YSURFFILE,YSURFFILETYPE & + ,YPGDFILE,TPGDFILE & +!UPG*PT +! ,YCAMSFILE,YCAMSFILETYPE) + ,YLIMAFILE,YLIMAFILETYPE) +!UPG*PT +ILUOUT0 = TLUOUT0%NLU +TLUOUT => TLUOUT0 +! +IF (YATMFILETYPE=='MESONH') THEN + LSHIFT = .FALSE. +ELSE IF (YATMFILETYPE=='GRIBEX') THEN + LSHIFT = .TRUE. +ELSE + LSHIFT = .TRUE. + WRITE(ILUOUT0,FMT=*) 'HATMFILETYPE WAS SET TO: '//TRIM(YATMFILETYPE) + WRITE(ILUOUT0,FMT=*) 'ONLY TWO VALUES POSSIBLE FOR HATMFILETYPE:' + WRITE(ILUOUT0,FMT=*) 'EITHER MESONH OR GRIBEX' + WRITE(ILUOUT0,FMT=*) '-> JOB ABORTED' + !callabortstop + CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','') +END IF +! +LCPL_AROME=.FALSE. +LCOUPLING=.FALSE. +! +!------------------------------------------------------------------------------- +! +!* 3. INITIALIZATION OF PHYSICAL CONSTANTS +! ------------------------------------ +! +CALL INI_CST +! +!------------------------------------------------------------------------------- +! +!* 4. READING OF NAMELIST +! ------------------- +! +!* 4.1 reading of configuration variables +! +IPRE_REAL1 = TZPRE_REAL1FILE%NLU +! +CALL INIT_NMLVAR +CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) +IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF) +CALL POSNAM(IPRE_REAL1,'NAM_PARAM_LIMA',GFOUND,ILUOUT0) +IF (GFOUND) READ(IPRE_REAL1,NAM_PARAM_LIMA) +! +CALL INI_FIELD_LIST(1) +! +CALL INI_FIELD_SCALARS() +! +!* 4.2 reading of values of some configuration variables in namelist +! +! +!JUAN REALZ from prep_surfex +! +IF (YATMFILETYPE == 'GRIBEX') THEN +! +!* 4.1 Vertical Spatial grid +! +CALL INIT_NMLVAR() +CALL READ_VER_GRID(TZPRE_REAL1FILE) +! +CALL IO_Field_read(TPGDFILE,'IMAX',NIMAX) +CALL IO_Field_read(TPGDFILE,'JMAX',NJMAX) +! +NIMAX_ll=NIMAX !! _ll variables are global variables +NJMAX_ll=NJMAX !! but the old names are kept in PRE_IDEA1.nam file +! +CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) +CALL SET_DAD0_ll() +!JUAN 4/04/2014 correction for PREP_REAL_CASE on Gribex files +!CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, 128) +CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX) +CALL SET_LBX_ll('OPEN',1) +CALL SET_LBY_ll('OPEN', 1) +CALL SET_XRATIO_ll(1, 1) +CALL SET_YRATIO_ll(1, 1) +CALL SET_XOR_ll(1, 1) +CALL SET_XEND_ll(NIMAX_ll+2*JPHEXT, 1) +CALL SET_YOR_ll(1, 1) +CALL SET_YEND_ll(NJMAX_ll+2*JPHEXT, 1) +CALL SET_DAD_ll(0, 1) +!JUANZ +!CALL INI_PARA_ll(IINFO_ll) +CALL INI_PARAZ_ll(IINFO_ll) +!JUANZ + +! +! sizes of arrays of the extended sub-domain +! +CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) +!!$CALL GET_DIM_EXT_ll('B',NIU,NJU) +!!$CALL GET_INDICE_ll(NIB,NJB,NIE,NJE) +!!$CALL GET_OR_ll('B',IXOR,IYOR) +ENDIF +!JUAN REALZ +! +LDUMMY_REAL= .FALSE. +LFILTERING= .FALSE. +CFILTERING= 'UVT ' +XLATGUESS= XUNDEF ; XLONGUESS= XUNDEF ; XBOXWIND=XUNDEF; XRADGUESS= XUNDEF +NK=50 ; XLAMBDA=0.2 ; NPHIL=24 +NLEVELR0=15 +NDIAG_FILT=-1 +LBOGUSSING= .FALSE. +XLATBOG= XUNDEF ; XLONBOG= XUNDEF +XVTMAXSURF= XUNDEF ; XRADWINDSURF= XUNDEF +XMAX=16000. ; XC=0.7 ; XRHO_Z=-0.3 ; XRHO_ZZ=0.9 +XB_0=1.65 ; XBETA_Z=-0.5 ; XBETA_ZZ=0.35 +XANGCONV0=0. ; XANGCONV1000=0. ; XANGCONV2000=0. +CDADATMFILE=' ' ; CDADBOGFILE=' ' +! +CALL INIT_NMLVAR +CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) +IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF) +CALL POSNAM(IPRE_REAL1,'NAM_HURR_CONF',GFOUND,ILUOUT0) +IF (GFOUND) READ(IPRE_REAL1,NAM_HURR_CONF) +CALL POSNAM(IPRE_REAL1,'NAM_CH_CONF',GFOUND,ILUOUT0) +IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CH_CONF) +CALL UPDATE_MODD_FROM_NMLVAR +CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) +IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) +CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0) +IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ) +CALL POSNAM(IPRE_REAL1,'NAM_IBM_LSF' ,GFOUND,ILUOUT0) +IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_IBM_LSF) +! +! Sea salt +CALL INIT_SALT +! +!* 4.3 set soil scheme to ISBA for initialization from GRIB +! +IF (YATMFILETYPE=='GRIBEX') THEN + CLBCX(:) ='OPEN' + CLBCY(:) ='OPEN' +END IF +! +CALL SECOND_MNH(ZTIME2) +ZMISC = ZTIME2 - ZTIME1 +!------------------------------------------------------------------------------- +! +!* 5. READING OF THE INPUT DATA +! ------------------------- +! +ZTIME1 = ZTIME2 +! +IF (YATMFILETYPE=='MESONH') THEN + CALL READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1FILE,YATMFILE,TPGDFILE,YDAD_NAME) +ELSE IF (YATMFILETYPE=='GRIBEX') THEN + IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX')THEN + CALL READ_ALL_DATA_GRIB_CASE('ATM1',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + ELSE + CALL READ_ALL_DATA_GRIB_CASE('ATM0',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + END IF +! + YDAD_NAME=' ' +END IF +! +IF (NIMAX==1 .AND. NJMAX==1) THEN + L1D=.TRUE. + L2D=.FALSE. +ELSE IF (NJMAX==1) THEN + L1D=.FALSE. + L2D=.TRUE. +ELSE + L1D=.FALSE. + L2D=.FALSE. +END IF +! +! UPG*PT +!* 5.1 reading of the input chemical data +! +!IF(LEN_TRIM(YCHEMFILE)>0)THEN +! ! read again Nam_aero_conf +! CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) +! IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) +! IF(YCHEMFILETYPE=='GRIBEX') & +! CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) +! IF (YCHEMFILETYPE=='NETCDF') & +! CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) +!END IF +! +!* 5.2 reading the input CAMS data +! +!IF(LEN_TRIM(YCAMSFILE)>0)THEN +! IF(YCAMSFILETYPE=='NETCDF') THEN +! CALL READ_CAMS_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCAMSFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) +! ELSE +! CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','CANNOT READ CAMS GRIB FILES YET') +! END IF +!END IF +!* 5.1 reading CAMS or MACC files for init LIMA +! +IF(LEN_TRIM(YLIMAFILE)>0)THEN + IF(YLIMAFILETYPE=='NETCDF') THEN + CALL READ_LIMA_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YLIMAFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + ELSE + WRITE(ILUOUT0,FMT=*) + !callabortstop + CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','Pb in MACC/CAMS file') + STOP + END IF +END IF +! +!* 5.2 reading of the input chemical data + dusts + salts if needed +! +IF(LEN_TRIM(YCHEMFILE)>0)THEN + ! read again Nam_aero_conf + CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) + IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) + IF(YCHEMFILETYPE=='GRIBEX') & + CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + IF (YCHEMFILETYPE=='MOZART') & + CALL READ_CHEM_DATA_MOZART_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + IF (YCHEMFILETYPE=='CAMSEU') & + CALL READ_CHEM_DATA_CAMS_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB, & + LDUMMY_REAL,LUSECHEM) +END IF + +!UPG*PT +! +CALL IO_File_close(TZPRE_REAL1FILE) +! +CALL SECOND_MNH(ZTIME2) +ZREAD = ZTIME2 - ZTIME1 - ZHORI +!------------------------------------------------------------------------------- +! +CALL IO_File_add2list(TINIFILE,CINIFILE,'MNH','WRITE',KLFITYPE=1,KLFIVERB=NVERB) +CALL IO_File_open(TINIFILE) +! +ZTIME1=ZTIME2 +! +!* 6. CONFIGURATION VARIABLES +! ----------------------- +! +!* 6.1 imposed values of some other configuration variables +! +CDCONV='NONE' +CSCONV='NONE' +CRAD='NONE' +CCONF='START' +NRIMX=6 +NRIMY=6 +LHORELAX_UVWTH=.TRUE. +LHORELAX_RV=LUSERV +LHORELAX_RC=LUSERC +LHORELAX_RR=LUSERR +LHORELAX_RI=LUSERI +LHORELAX_RS=LUSERS +LHORELAX_RG=LUSERG +LHORELAX_RH=LUSERH +LHORELAX_SV(:)=.FALSE. +LHORELAX_SVC2R2 = (NSV_C2R2 > 0) +LHORELAX_SVC1R3 = (NSV_C1R3 > 0) +LHORELAX_SVLIMA = (NSV_LIMA > 0) +LHORELAX_SVELEC = (NSV_ELEC > 0) +LHORELAX_SVCHEM = (NSV_CHEM > 0) +LHORELAX_SVCHIC = (NSV_CHIC > 0) +LHORELAX_SVDST = (NSV_DST > 0) +LHORELAX_SVSLT = (NSV_SLT > 0) +LHORELAX_SVAER = (NSV_AER > 0) +LHORELAX_SVPP = (NSV_PP > 0) +#ifdef MNH_FOREFIRE +LHORELAX_SVFF = (NSV_FF > 0) +#endif +LHORELAX_SVCS = (NSV_CS > 0) + +LHORELAX_SVLG = .FALSE. +LHORELAX_SV(1:NSV)=.TRUE. +IF ( CTURB /= 'NONE') THEN + LHORELAX_TKE = .TRUE. +ELSE + LHORELAX_TKE = .FALSE. +END IF +! +! +CSTORAGE_TYPE='TT' +!------------------------------------------------------------------------------- +! +!* 8. COMPUTATION OF GEOMETRIC VARIABLES +! ---------------------------------- +! +ZTIME1 = ZTIME2 +! +ALLOCATE(XMAP(SIZE(XXHAT),SIZE(XYHAT))) +ALLOCATE(XLAT(SIZE(XXHAT),SIZE(XYHAT))) +ALLOCATE(XLON(SIZE(XXHAT),SIZE(XYHAT))) +ALLOCATE(XDXHAT(SIZE(XXHAT))) +ALLOCATE(XDYHAT(SIZE(XYHAT))) +ALLOCATE(XZZ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +ALLOCATE(ZJ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +! +IF (LCARTESIAN) THEN + CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,ZJ) + XMAP=1. +ELSE + CALL SM_GRIDPROJ(XXHAT,XYHAT,XZHAT,XZS, & + LSLEVE,XLEN1,XLEN2,XZSMT,XLATORI,XLONORI, & + XMAP,XLAT,XLON,XDXHAT,XDYHAT,XZZ,ZJ ) +END IF +! +CALL MPPDB_CHECK2D(XZS,"prep_real_case8:XZS",PRECISION) +CALL MPPDB_CHECK2D(XMAP,"prep_real_case8:XMAP",PRECISION) +CALL MPPDB_CHECK2D(XLAT,"prep_real_case8:XLAT",PRECISION) +CALL MPPDB_CHECK2D(XLON,"prep_real_case8:XLON",PRECISION) +CALL MPPDB_CHECK3D(XZZ,"prep_real_case8:XZZ",PRECISION) +CALL MPPDB_CHECK3D(ZJ,"prep_real_case8:ZJ",PRECISION) +! +ALLOCATE(XDXX(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +ALLOCATE(XDYY(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +ALLOCATE(XDZX(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +ALLOCATE(XDZY(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +ALLOCATE(XDZZ(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))) +! +!20131024 add update halo +!=> corrects on PDXX calculation in metrics and XDXX !! +CALL ADD3DFIELD_ll( TZFIELDS_ll, XZZ, 'PREP_REAL_CASE::XZZ' ) +CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) +CALL CLEANLIST_ll(TZFIELDS_ll) +! +CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ) +! +CALL MPPDB_CHECK3D(XDXX,"prc8-beforeupdate_metrics:PDXX",PRECISION) +CALL MPPDB_CHECK3D(XDYY,"prc8-beforeupdate_metrics:PDYY",PRECISION) +CALL MPPDB_CHECK3D(XDZX,"prc8-beforeupdate_metrics:PDZX",PRECISION) +CALL MPPDB_CHECK3D(XDZY,"prc8-beforeupdate_metrics:PDZY",PRECISION) +! +CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ) +! +!20131112 add update_halo for XDYY and XDZY!! +CALL ADD3DFIELD_ll( TZFIELDS_ll, XDXX, 'PREP_REAL_CASE::XDXX' ) +CALL ADD3DFIELD_ll( TZFIELDS_ll, XDZX, 'PREP_REAL_CASE::XDZX' ) +CALL ADD3DFIELD_ll( TZFIELDS_ll, XDYY, 'PREP_REAL_CASE::XDYY' ) +CALL ADD3DFIELD_ll( TZFIELDS_ll, XDZY, 'PREP_REAL_CASE::XDZY' ) +CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) +CALL CLEANLIST_ll(TZFIELDS_ll) + +!CALL EXTRAPOL('W',XDXX,XDZX) +!CALL EXTRAPOL('S',XDYY,XDZY) + +CALL SECOND_MNH(ZTIME2) + +ZMISC = ZMISC + ZTIME2 - ZTIME1 +!------------------------------------------------------------------------------- +! +!* 9. PREPARATION OF THE VERTICAL SHIFT AND INTERPOLATION +! --------------------------------------------------- +! +ZTIME1 = ZTIME2 +! +IF (YATMFILETYPE=='GRIBEX') THEN + CALL VER_PREP_GRIBEX_CASE('ATM ',ZDG) +ELSE IF (YATMFILETYPE=='MESONH') THEN + CALL VER_PREP_MESONH_CASE(ZDG) +END IF +! +IF (LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX') THEN + CALL VER_PREP_GRIBEX_CASE('CHEM',ZDG) +END IF +!UPG*PT +!IF ((LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='NETCDF') .OR. & +! (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF')) THEN +! CALL VER_PREP_NETCDF_CASE(ZDG) +!END IF +IF (LEN_TRIM(YCHEMFILE)>0 .AND. ((YCHEMFILETYPE=='MOZART').OR. & + (YCHEMFILETYPE=='CAMSEU'))) THEN + CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS) + + DEALLOCATE(XSV_LS) +END IF +! +IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN + CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS_LIMA) + DEALLOCATE(XSV_LS_LIMA) +END IF +!UPG*PT +! +CALL SECOND_MNH(ZTIME2) +ZPREP = ZTIME2 - ZTIME1 - ZDG +ZDIAG = ZDIAG + ZDG +!------------------------------------------------------------------------------- +! +!* 10. VERTICAL INTERPOLATION OF ALL THERMODYNAMICAL VARIABLES +! ------------------------------------------------------- +! +ZTIME1 = ZTIME2 +! +ALLOCATE(XPSURF(SIZE(XXHAT),SIZE(XYHAT))) +! +CALL EXTRAPOL('E',XEXNTOP2D) +IF (YATMFILETYPE=='GRIBEX') THEN + CALL VER_THERMO(TINIFILE,LSHIFT,XTHV_MX,XR_MX,XZS_LS,XZSMT_LS,XZMASS_MX,XZFLUX_MX,XPMHP_MX,ZJ, & + XDXX,XDYY,XEXNTOP2D,XPSURF,ZDG ) +ELSE IF (YATMFILETYPE=='MESONH') THEN + CALL VER_THERMO(TINIFILE,LSHIFT,XTHV_MX,XR_MX,XZS_LS,XZSMT_LS,XZMASS_MX,XZFLUX_MX,XPMHP_MX,ZJ, & + XDXX,XDYY,XEXNTOP2D,XPSURF,ZDG, & + XLSTH_MX,XLSRV_MX ) +END IF +! +CALL SECOND_MNH(ZTIME2) +ZTHERMO = ZTIME2 - ZTIME1 - ZDG +ZDIAG = ZDIAG + ZDG +!------------------------------------------------------------------------------- +! +!* 12. VERTICAL INTERPOLATION OF DYNAMICAL VARIABLES +! --------------------------------------------- +! +ZTIME1 = ZTIME2 +IF (YATMFILETYPE=='GRIBEX') THEN + CALL VER_DYN(LSHIFT,XU_MX,XV_MX,XW_MX,XRHOD_MX,XZFLUX_MX,XZMASS_MX,XZS_LS, & + XDXX,XDYY,XDZZ,XDZX,XDZY,ZJ,YATMFILETYPE ) +ELSE IF (YATMFILETYPE=='MESONH') THEN + CALL VER_DYN(LSHIFT,XU_MX,XV_MX,XW_MX,XRHOD_MX,XZFLUX_MX,XZMASS_MX,XZS_LS, & + XDXX,XDYY,XDZZ,XDZX,XDZY,ZJ,YATMFILETYPE, & + XLSU_MX,XLSV_MX,XLSW_MX ) +END IF +! +! +IF (ALLOCATED(XTHV_MX)) DEALLOCATE(XTHV_MX) +IF (ALLOCATED(XR_MX)) DEALLOCATE(XR_MX) +IF (ALLOCATED(XPMHP_MX)) DEALLOCATE(XPMHP_MX) +IF (ALLOCATED(XU_MX)) DEALLOCATE(XU_MX) +IF (ALLOCATED(XV_MX)) DEALLOCATE(XV_MX) +IF (ALLOCATED(XW_MX)) DEALLOCATE(XW_MX) +IF (ALLOCATED(XLSTH_MX)) DEALLOCATE(XLSTH_MX) +IF (ALLOCATED(XLSRV_MX)) DEALLOCATE(XLSRV_MX) +IF (ALLOCATED(XLSU_MX)) DEALLOCATE(XLSU_MX) +IF (ALLOCATED(XLSV_MX)) DEALLOCATE(XLSV_MX) +IF (ALLOCATED(XLSW_MX)) DEALLOCATE(XLSW_MX) +IF (ALLOCATED(XZFLUX_MX)) DEALLOCATE(XZFLUX_MX) +IF (ALLOCATED(XZMASS_MX)) DEALLOCATE(XZMASS_MX) +IF (ALLOCATED(XRHOD_MX)) DEALLOCATE(XRHOD_MX) +IF (ALLOCATED(XEXNTOP2D)) DEALLOCATE(XEXNTOP2D) +IF (ALLOCATED(XZS_LS)) DEALLOCATE(XZS_LS) +IF (ALLOCATED(XZSMT_LS)) DEALLOCATE(XZSMT_LS) +! +!------------------------------------------------------------------------------- +! +!* 13. ANELASTIC CORRECTION +! -------------------- +! +CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ) +! +CALL SECOND_MNH(ZTIME2) +ZDYN = ZTIME2 - ZTIME1 +! +!------------------------------------------------------------------------------- +! +!* 14. INITIALIZATION OF THE REMAINING PROGNOSTIC VARIABLES (COPIES) +! ------------------------------------------------------------- +! +ZTIME1 = ZTIME2 +! +IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='MESONH')THEN + CALL INI_PROG_VAR(XTKE_MX,XSV_MX,YCHEMFILE) + LHORELAX_SVCHEM = (NSV_CHEM > 0) + LHORELAX_SVCHIC = (NSV_CHIC > 0) + LHORELAX_SVDST = (NSV_DST > 0) + LHORELAX_SVSLT = (NSV_SLT > 0) + LHORELAX_SVAER = (NSV_AER > 0) +ELSE +! +!UPG*PT +!IF (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF') THEN +IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN +!UPG*PT + CALL LIMA_MIXRAT_TO_NCONC(XPABST, XTHT, XRT(:,:,:,1), XSV_MX) +END IF +! + CALL INI_PROG_VAR(XTKE_MX,XSV_MX) +END IF +! + +! Initialization of ORILAM variables +IF (LORILAM) THEN + IF (.NOT.(ASSOCIATED(XN3D))) ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XRG3D))) ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XSIG3D))) ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XRHOP3D))) ALLOCATE(XRHOP3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XM3D))) ALLOCATE(XM3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE*3)) + IF (.NOT.(ASSOCIATED(XCTOTA3D))) & + ALLOCATE(XCTOTA3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSP+NCARB+NSOA,JPMODE)) + + CALL CH_AER_EQM_INIT_n(XSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND),& + XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),& + XM3D,XRHOP3D,XSIG3D,& + XRG3D,XN3D, XRHODREF, XCTOTA3D) +END IF +! +! Initialization LIMA variables by ORILAM +IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN + + ! Init LIMA by ORILAM + CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT,XZZ) + + ! Init LB LIMA by ORILAM + ALLOCATE(ZLBXRHO(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) + ALLOCATE(ZLBYRHO(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) + ALLOCATE(ZLBXPABST(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) + ALLOCATE(ZLBYPABST(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) + ALLOCATE(ZLBXZZ(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) + ALLOCATE(ZLBYZZ(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) + + ILBX=SIZE(XLBXSVM,1)/2-JPHEXT + ILBY=SIZE(XLBYSVM,2)/2-JPHEXT + + CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) + + ZLBXRHO(1:ILBX+1,:,:) = XRHODREF(IIB-1:IIB-1+ILBX,:,:) + ZLBXRHO(ILBX+2:2*ILBX+2,:,:) = XRHODREF(IIE+1-ILBX:IIE+1,:,:) + ZLBYRHO(:,1:ILBY+1,:) = XRHODREF(:,IJB-1:IJB-1+ILBY,:) + ZLBYRHO(:,ILBY+2:2*ILBY+2,:) = XRHODREF(:,IJE+1-ILBY:IJE+1,:) + ZLBXPABST(1:ILBX+1,:,:) = XPABST(IIB-1:IIB-1+ILBX,:,:) + ZLBXPABST(ILBX+2:2*ILBX+2,:,:) = XPABST(IIE+1-ILBX:IIE+1,:,:) + ZLBYPABST(:,1:ILBY+1,:) = XPABST(:,IJB-1:IJB-1+ILBY,:) + ZLBYPABST(:,ILBY+2:2*ILBY+2,:) = XPABST(:,IJE+1-ILBY:IJE+1,:) + ZLBXZZ(1:ILBX+1,:,:) = XZZ(IIB-1:IIB-1+ILBX,:,:) + ZLBXZZ(ILBX+2:2*ILBX+2,:,:) = XZZ(IIE+1-ILBX:IIE+1,:,:) + ZLBYZZ(:,1:ILBY+1,:) = XZZ(:,IJB-1:IJB-1+ILBY,:) + ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:) + + CALL AER2LIMA(XLBXSVM, ZLBXRHO, XLBXRM(:,:,:,1), ZLBXPABST, XLBXTHM, ZLBXZZ) + CALL AER2LIMA(XLBYSVM, ZLBYRHO, XLBYRM(:,:,:,1), ZLBYPABST, XLBYTHM, ZLBYZZ) + + DEALLOCATE(ZLBXRHO) + DEALLOCATE(ZLBYRHO) + DEALLOCATE(ZLBXPABST) + DEALLOCATE(ZLBYPABST) + DEALLOCATE(ZLBXZZ) + DEALLOCATE(ZLBYZZ) + +END IF +! +IF (ALLOCATED(XSV_MX)) DEALLOCATE(XSV_MX) +IF (ALLOCATED(XTKE_MX)) DEALLOCATE(XTKE_MX) +! +CALL BOUNDARIES ( & + 0.,CLBCX,CLBCY,NRR,NSV,1, & + XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & + XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & + XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM, & + XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM, & + XRHODJ,XRHODREF, & + XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT ) +! +CALL SECOND_MNH(ZTIME2) +ZMISC = ZMISC + ZTIME2 - ZTIME1 +! +!------------------------------------------------------------------------------- +! +!* 15. Error on temperature during interpolations +! ------------------------------------------ +! +ZTIME1 = ZTIME2 +! +IF (YATMFILETYPE=='GRIBEX' .AND. NVERB>1) THEN + CALL ERROR_ON_TEMPERATURE(XT_LS,XPMASS_LS,XPABST,XPS_LS,XPSURF) +END IF +! +IF (YATMFILETYPE=='GRIBEX') THEN + DEALLOCATE(XT_LS) + DEALLOCATE(XPMASS_LS) + DEALLOCATE(XPS_LS) +END IF +! +IF (ALLOCATED(XPSURF)) DEALLOCATE(XPSURF) +! +CALL SECOND_MNH(ZTIME2) +ZDIAG = ZDIAG + ZTIME2 - ZTIME1 +!------------------------------------------------------------------------------- +! +!* 16. INITIALIZE LEVELSET FOR IBM +! --------------------------- +! +IF (LIBM_LSF) THEN + ! + IF (.NOT.LCARTESIAN) THEN + CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','IBM can only be used with cartesian coordinates') + ENDIF + ! + CALL GET_DIM_EXT_ll('B',NIU,NJU) + NKU=NKMAX+2*JPVEXT + ! + ALLOCATE(XIBM_LS(NIU,NJU,NKU,4)) + ! + CALL IBM_INIT_LS(XIBM_LS) + ! +ENDIF +! +!------------------------------------------------------------------------------- +! +!* 17. WRITING OF THE MESO-NH FM-FILE +! ------------------------------ +! +ZTIME1 = ZTIME2 +! +CSTORAGE_TYPE='TT' +IF (YATMFILETYPE=='GRIBEX') THEN + CSURF = "EXTE" + DO JRR=1,NRR + IF (JRR==1) THEN + LUSERV=.TRUE. + IDX_RVT = JRR + END IF + IF (JRR==2) THEN + LUSERC=.TRUE. + IDX_RCT = JRR + END IF + IF (JRR==3) THEN + LUSERR=.TRUE. + IDX_RRT = JRR + END IF + IF (JRR==4) THEN + LUSERI=.TRUE. + IDX_RIT = JRR + END IF + IF (JRR==5) THEN + LUSERS=.TRUE. + IDX_RST = JRR + END IF + IF (JRR==6) THEN + LUSERG=.TRUE. + IDX_RGT = JRR + END IF + IF (JRR==7) THEN + LUSERH=.TRUE. + IDX_RHT = JRR + END IF + END DO +END IF +! +CALL WRITE_DESFM_n(1,TINIFILE) +CALL IO_Header_write(TINIFILE,HDAD_NAME=YDAD_NAME) +CALL WRITE_LFIFM_n(TINIFILE,YDAD_NAME) +! +CALL SECOND_MNH(ZTIME2) +ZWRITE = ZTIME2 - ZTIME1 +! +!------------------------------------------------------------------------------- +! +!* 18. OROGRAPHIC and DUMMY PHYSIOGRAPHIC FIELDS +! ----------------------------------------- +! +!* reading in the PGD file +! +CALL MNHREAD_ZS_DUMMY_n(TPGDFILE) +! +!* writing in the output file +! +TOUTDATAFILE => TINIFILE +CALL MNHWRITE_ZS_DUMMY_n(TINIFILE) +! +CALL DEALLOCATE_MODEL1(3) +! +IF (YATMFILETYPE=='MESONH'.AND. YATMFILE/=YPGDFILE) THEN + CALL IO_File_find_byname(TRIM(YATMFILE),TZATMFILE,IRESP) + CALL IO_File_close(TZATMFILE) +END IF +!------------------------------------------------------------------------------- +! +!* 19. INTERPOLATION OF SURFACE VARIABLES +! ---------------------------------- +! +IF (.NOT. LCOUPLING ) THEN + ZTIME1 = ZTIME2 +! + IF (CSURF=="EXTE") THEN + IF (YATMFILETYPE/='MESONH') THEN + CALL SURFEX_ALLOC_LIST(1) + YSURF_CUR => YSURF_LIST(1) + CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) + ENDIF + CALL GOTO_SURFEX(1) + TFILE_SURFEX => TINIFILE + CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE) + NULLIFY(TFILE_SURFEX) + ENDIF +! + CALL SECOND_MNH(ZTIME2) + ZSURF = ZSURF + ZTIME2 - ZTIME1 +ENDIF +! +!------------------------------------------------------------------------------- +! +!* 20. EPILOGUE +! -------- +! +WRITE(ILUOUT0,*) +WRITE(ILUOUT0,*) +WRITE(ILUOUT0,*) +WRITE(ILUOUT0,*) '**************************************************' +WRITE(ILUOUT0,*) '* PREP_REAL_CASE: PREP_REAL_CASE ends correctly. *' +WRITE(ILUOUT0,*) '**************************************************' +WRITE(ILUOUT0,*) +! +!------------------------------------------------------------------------------- +! +CALL SECOND_MNH (ZEND) +! +ZTOT = ZEND - ZSTART ! for computing time analysis +! +ZALL = ZMISC + ZREAD + ZHORI + ZPREP + ZTHERMO + ZSURF + ZDYN + ZDIAG + ZWRITE +! +WRITE(ILUOUT0,*) +WRITE(ILUOUT0,*) ' ------------------------------------------------------------ ' +WRITE(ILUOUT0,*) '| |' +WRITE(ILUOUT0,*) '| COMPUTING TIME ANALYSIS in PREP_REAL_CASE |' +WRITE(ILUOUT0,*) '| |' +WRITE(ILUOUT0,*) '|------------------------------------------------------------|' +WRITE(ILUOUT0,*) '| | | |' +WRITE(ILUOUT0,*) '| ROUTINE NAME | CPU-TIME | PERCENTAGE % |' +WRITE(ILUOUT0,*) '| | | |' +WRITE(ILUOUT0,*) '|---------------------|-------------------|------------------|' +WRITE(ILUOUT0,*) '| | | |' +WRITE(UNIT=ILUOUT0,FMT=2) ZREAD, 100.*ZREAD/ZTOT +WRITE(UNIT=ILUOUT0,FMT=9) ZHORI, 100.*ZHORI/ZTOT +WRITE(UNIT=ILUOUT0,FMT=3) ZPREP, 100.*ZPREP/ZTOT +WRITE(UNIT=ILUOUT0,FMT=4) ZTHERMO, 100.*ZTHERMO/ZTOT +WRITE(UNIT=ILUOUT0,FMT=6) ZDYN, 100.*ZDYN/ZTOT +WRITE(UNIT=ILUOUT0,FMT=7) ZDIAG, 100.*ZDIAG/ZTOT +WRITE(UNIT=ILUOUT0,FMT=8) ZWRITE, 100.*ZWRITE/ZTOT +WRITE(UNIT=ILUOUT0,FMT=1) ZMISC, 100.*ZMISC/ZTOT +WRITE(UNIT=ILUOUT0,FMT=5) ZSURF, 100.*ZSURF/ZTOT +! +WRITE(UNIT=ILUOUT0,FMT=10) ZTOT , 100.*ZALL/ZTOT +WRITE(ILUOUT0,*) ' ------------------------------------------------------------ ' +! +! FORMATS +! ------- +! +2 FORMAT(' | READING OF DATA | ',F8.3,' | ',F8.3,' |') +9 FORMAT(' | HOR. INTERPOLATIONS | ',F8.3,' | ',F8.3,' |') +3 FORMAT(' | VER_PREP | ',F8.3,' | ',F8.3,' |') +4 FORMAT(' | VER_THERMO | ',F8.3,' | ',F8.3,' |') +6 FORMAT(' | VER_DYN | ',F8.3,' | ',F8.3,' |') +7 FORMAT(' | DIAGNOSTICS | ',F8.3,' | ',F8.3,' |') +8 FORMAT(' | WRITE | ',F8.3,' | ',F8.3,' |') +1 FORMAT(' | MISCELLANEOUS | ',F8.3,' | ',F8.3,' |') +5 FORMAT(' | SURFACE | ',F8.3,' | ',F8.3,' |') +10 FORMAT(' | PREP_REAL_CASE | ',F8.3,' | ',F8.3,' |') +! +!------------------------------------------------------------------------------- +! +IF (LEN_TRIM(YDAD_NAME)>0) THEN + WRITE(ILUOUT0,*) ' ' + WRITE(ILUOUT0,*) ' ------------------------------------------------------------' + WRITE(ILUOUT0,*) '| Nesting allowed |' + WRITE(ILUOUT0,*) '| DAD_NAME="',YDAD_NAME,'" |' + WRITE(ILUOUT0,*) ' ------------------------------------------------------------' + WRITE(ILUOUT0,*) ' ' +ELSE + WRITE(ILUOUT0,*) ' ' + WRITE(ILUOUT0,*) ' ------------------------------------------------------------' + WRITE(ILUOUT0,*) '| Nesting not allowed with a larger-scale model. |' + WRITE(ILUOUT0,*) '| The new file can only be used as model number 1 |' + WRITE(ILUOUT0,*) ' ------------------------------------------------------------' + WRITE(ILUOUT0,*) ' ' +END IF +! +!------------------------------------------------------------------------------- +! +CALL IO_File_close(TINIFILE) +CALL IO_File_close(TPGDFILE) +! +CALL FINALIZE_MNH() +! +!------------------------------------------------------------------------------- +! +CONTAINS + +SUBROUTINE INIT_NMLVAR +CPRESOPT=CPRESOPT_n +LRES=LRES_n +XRES=XRES_n +NITR=NITR_n +LUSECHAQ=LUSECHAQ_n +LUSECHIC=LUSECHIC_n +LUSECHEM=LUSECHEM_n +END SUBROUTINE INIT_NMLVAR + +SUBROUTINE UPDATE_MODD_FROM_NMLVAR +CPRESOPT_n=CPRESOPT +LRES_n=LRES +XRES_n=XRES +NITR_n=NITR +LUSECHAQ_n=LUSECHAQ +LUSECHIC_n=LUSECHIC +LUSECHEM_n=LUSECHEM +END SUBROUTINE UPDATE_MODD_FROM_NMLVAR + +END PROGRAM PREP_REAL_CASE