Newer
Older

WAUTELET Philippe
committed
!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence

WAUTELET Philippe
committed
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.

WAUTELET Philippe
committed
!-----------------------------------------------------------------
MODULE MODI_READ_FIELD
! ######################
!
INTERFACE
!

WAUTELET Philippe
committed
SUBROUTINE READ_FIELD(KOCEMI,TPINIFILE,KIU,KJU,KKU, &

RODIER Quentin
committed
HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS, &
HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,HGETICEFR, &
HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME, &
HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, &
KSIZELBXTKE_ll,KSIZELBYTKE_ll, &
KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, &

WAUTELET Philippe
committed
PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS, &

RODIER Quentin
committed
PRT,PSVT,PZWS,PCIT,PDRYMASST,PDRYMASSS, &
PSIGS,PSRCT,PCLDFR,PICEFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, &

RODIER Quentin
committed
PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, PLSZWSM, &
PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, &
PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM, &
KFRC,TPDTFRC,PUFRC,PVFRC,PWFRC,PTHFRC,PRVFRC, &
PTENDTHFRC,PTENDRVFRC,PGXTHFRC,PGYTHFRC,PPGROUNDFRC,PATC, &

WAUTELET Philippe
committed
PTENDUFRC,PTENDVFRC, &
KADVFRC,TPDTADVFRC,PDTHFRC,PDRVFRC, &
KRELFRC,TPDTRELFRC, PTHREL, PRVREL, &

RODIER Quentin
committed
PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD,PRSVS_CLD, &
PIBM_LSF,PIBM_XMUT,PUMEANW,PVMEANW,PWMEANW,PUMEANN,PVMEANN, &
PWMEANN,PUMEANE,PVMEANE,PWMEANE,PUMEANS,PVMEANS,PWMEANS, &
PLSPHI,PBMAP,PFMASE,PFMAWC,PFMWINDU,PFMWINDV,PFMWINDW,PFMHWS )

WAUTELET Philippe
committed
USE MODD_IO, ONLY : TFILEDATA
USE MODD_TIME ! for type DATE_TIME
!
!

WAUTELET Philippe
committed
INTEGER, INTENT(IN) :: KOCEMI !Ocan model index
TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file

WAUTELET Philippe
committed
INTEGER, INTENT(IN) :: KIU, KJU, KKU
! array sizes in x, y and z directions
!
CHARACTER (LEN=*), INTENT(IN) :: HGETTKET, &
HGETRVT,HGETRCT,HGETRRT, &
HGETRIT,HGETRST,HGETRGT,HGETRHT, &

RODIER Quentin
committed
HGETCIT,HGETSRCT, HGETZWS, &
HGETSIGS, HGETCLDFR, HGETICEFR, &
HGETBL_DEPTH, HGETSBL_DEPTH, &
HGETPHC, HGETPHR
CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVT
!
! GET indicators to know wether a given variable should or not be read in the
! FM file at time t-deltat and t
CHARACTER(LEN=6), INTENT(IN) :: HUVW_ADV_SCHEME ! advection scheme for wind
CHARACTER(LEN=4), INTENT(IN) :: HTEMP_SCHEME ! advection scheme for wind
!
! sizes of the West-east total LB area
INTEGER, INTENT(IN) :: KSIZELBX_ll,KSIZELBXU_ll ! for T,V,W and u
INTEGER, INTENT(IN) :: KSIZELBXTKE_ll ! for TKE
INTEGER, INTENT(IN) :: KSIZELBXR_ll,KSIZELBXSV_ll ! for Rx and SV
! sizes of the North-south total LB area
INTEGER, INTENT(IN) :: KSIZELBY_ll,KSIZELBYV_ll ! for T,U,W and v
INTEGER, INTENT(IN) :: KSIZELBYTKE_ll ! for TKE
INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll ! for Rx and SV
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PUM,PVM,PWM ! U,V,W at t-dt
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDUM,PDVM,PDWM ! Difference on U,V,W
! between t+dt and t-dt
REAL, DIMENSION(:,:), INTENT(OUT) :: PBL_DEPTH ! BL depth
REAL, DIMENSION(:,:), INTENT(OUT) :: PSBL_DEPTH ! SBL depth
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTHVMF ! MassFlux buoyancy flux
!
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PUT,PVT,PWT ! U,V,W at t
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PTHT,PTKET ! theta, tke and
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRTKEMS ! tke adv source
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPABST ! pressure at t
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PRT,PSVT ! moist and scalar
! variables at t
REAL, DIMENSION(:,:), INTENT(INOUT) :: PZWS
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCT ! turbulent flux
! <s'Rc'> at t
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCIT ! ice conc. at t
REAL, INTENT(OUT) :: PDRYMASST ! Md(t)

RODIER Quentin
committed
REAL, INTENT(OUT) :: PDRYMASSS ! d Md(t) / dt
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS ! =sqrt(<s's'>) for the
! Subgrid Condensation
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! cloud fraction
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PICEFR ! cloud fraction
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHC ! pH value in cloud water
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHR ! pH value in rainwater
! Larger Scale fields
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLSUM,PLSVM,PLSWM ! Wind
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLSTHM, PLSRVM ! Mass
! LB fields

RODIER Quentin
committed
REAL, DIMENSION(:,:), INTENT(OUT) :: PLSZWSM ! significant height of sea waves
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Wind
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTHM ! Mass
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYUM,PLBYVM,PLBYWM ! Wind
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYTHM ! Mass
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTKEM ! TKE
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYTKEM
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBXRM ,PLBXSVM ! Moisture and SV
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBYRM ,PLBYSVM ! in x and y-dir.
! Forcing fields
INTEGER, INTENT(IN) :: KFRC ! number of forcing
TYPE (DATE_TIME), DIMENSION(:), INTENT(OUT) :: TPDTFRC ! date of forcing profs.
REAL, DIMENSION(:,:), INTENT(OUT) :: PUFRC,PVFRC,PWFRC ! forcing variables
REAL, DIMENSION(:,:), INTENT(OUT) :: PTHFRC,PRVFRC
REAL, DIMENSION(:,:), INTENT(OUT) :: PTENDUFRC,PTENDVFRC
REAL, DIMENSION(:,:), INTENT(OUT) :: PTENDTHFRC,PTENDRVFRC,PGXTHFRC,PGYTHFRC
REAL, DIMENSION(:), INTENT(OUT) :: PPGROUNDFRC
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PATC
INTEGER, INTENT(IN) :: KADVFRC ! number of forcing
TYPE (DATE_TIME), DIMENSION(:), INTENT(OUT) :: TPDTADVFRC ! date of forcing profs.
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PDTHFRC, PDRVFRC
INTEGER, INTENT(IN) :: KRELFRC ! number of forcing
TYPE (DATE_TIME), DIMENSION(:), INTENT(OUT) :: TPDTRELFRC ! date of forcing profs.
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PTHREL, PRVREL
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M ! Eddy fluxes
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS_PRES, PRVS_PRES, PRWS_PRES
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRTHS_CLD
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS_CLD, PRSVS_CLD

RODIER Quentin
committed
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PIBM_LSF,PIBM_XMUT
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANW,PVMEANW,PWMEANW
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANN,PVMEANN,PWMEANN
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANE,PVMEANE,PWMEANE
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANS,PVMEANS,PWMEANS
! Fire Model fields
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLSPHI ! Fire Model Level Set function Phi [-]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBMAP ! Fire Model Burning map [s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMASE ! Fire Model Available Sensible Energy [J/m2]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMAWC ! Fire Model Available Water Content [kg/m2]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMWINDU ! Fire Model filtered u wind [m/s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMWINDV ! Fire Model filtered v wind [m/s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMWINDW ! Fire Model filtered w wind [m/s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMHWS ! Fire Model filtered horizontal wind speed [m/s]
!
END SUBROUTINE READ_FIELD
!
END INTERFACE
!
END MODULE MODI_READ_FIELD
!
! ########################################################################

WAUTELET Philippe
committed
SUBROUTINE READ_FIELD(KOCEMI,TPINIFILE,KIU,KJU,KKU, &

RODIER Quentin
committed
HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS, &
HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,HGETICEFR, &
HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME, &
HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, &
KSIZELBXTKE_ll,KSIZELBYTKE_ll, &
KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, &

WAUTELET Philippe
committed
PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS, &

RODIER Quentin
committed
PRT,PSVT,PZWS,PCIT,PDRYMASST,PDRYMASSS, &
PSIGS,PSRCT,PCLDFR,PICEFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, &

RODIER Quentin
committed
PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM, &
PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, &
PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM, &
KFRC,TPDTFRC,PUFRC,PVFRC,PWFRC,PTHFRC,PRVFRC, &
PTENDTHFRC,PTENDRVFRC,PGXTHFRC,PGYTHFRC,PPGROUNDFRC,PATC, &

WAUTELET Philippe
committed
PTENDUFRC,PTENDVFRC, &
KADVFRC,TPDTADVFRC,PDTHFRC,PDRVFRC, &
KRELFRC,TPDTRELFRC, PTHREL, PRVREL, &

RODIER Quentin
committed
PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD,PRSVS_CLD, &
PIBM_LSF,PIBM_XMUT,PUMEANW,PVMEANW,PWMEANW,PUMEANN,PVMEANN, &
PWMEANN,PUMEANE,PVMEANE,PWMEANE,PUMEANS,PVMEANS,PWMEANS, &
PLSPHI,PBMAP,PFMASE,PFMAWC,PFMWINDU,PFMWINDV,PFMWINDW,PFMHWS )
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
! ########################################################################
!
!!**** *READ_FIELD* - routine to read prognostic and surface fields
!!
!! PURPOSE
!! -------
! The purpose of this routine is to initialize prognostic and
! surface fields by reading their value in initial file or by setting
! them to a fixed value.
!
!!** METHOD
!! ------
!! According to the get indicators, the prognostics fields are :
!! - initialized by reading their value in the LFIFM file
!! if the corresponding indicators are equal to 'READ'
!! - initialized to zero if the corresponding indicators
!! are equal to 'INIT'
!! - not initialized if their corresponding indicators
!! are equal to 'SKIP'
!!
!! In case of time step change, all fields at t-dt are (linearly)
!! interpolated to get a consistant initial state before the segment
!! integration
!!
!! EXTERNAL
!! --------
!! FMREAD : to read data in LFIFM file
!! INI_LS : to initialize larger scale fields
!! INI_LB : to initialize "2D" surfacic LB fields
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_CONF : NVERB,CCONF,CPROGRAM
!!
!! Module MODD_CTURB : XTKEMIN
!!
!! REFERENCE
!! ---------
!! Book2 of the documentation (routine READ_FIELD)
!!
!!
!! AUTHOR
!! ------
!! V. Ducrocq * Meteo France *
!!
!! MODIFICATIONS
!! -------------
!! Original 15/06/94
!! modification 22/11/94 add the pressure function (J.Stein)
!! modification 22/11/94 add the LS fields (J.Stein)
!! modification 06/01/95 add Md(t) (J.P.Lafore)
!! 26/03/95 add EPS var (J. Cuxart)
!! 30/06/95 add var related to the Subgrid condensation
!! (J.Stein)
!! 18/08/95 time step change case (J.P.Lafore)
!! 01/03/96 add the cloud fraction (J. Stein)
!! modification 13/12/95 add fmread of the forcing variables
!! (M.Georgelin)
!! modification 13/02/96 external control of the forcing (J.-P. Pinty)
!! 11/04/96 add the ice concentration (J.-P. Pinty)
!! 27/01/97 read ISVR 3D fields of SV (J.-P. Pinty)
!! 26/02/97 "surfacic" LS fieds introduction (J.P.Lafore)
!! (V MASSON) 03/03/97 positivity control for time step change
!! 10/04/97 proper treatment of minima for LS-fields (J.P.Lafore)
!! J. Stein 22/06/97 use the absolute pressure
!! J. Stein 22/10/97 cleaning + add the LB fields for u,v,w,theta,Rv
!! P. Bechtold 22/01/98 add SST and surface pressure forcing
!! V. Ducrocq 14/08/98 //, remove KIINF,KJINF,KISUP,KJSUP,
!! and introduce INI_LS and INI_LB
!! J. Stein 22/01/99 add the reading of STORAGE_TYPE to improve
!! the START case when the file contains 2
!! instants MT
!! D. Gazen 22/01/01 use MODD_NSV to handle NSV floating indices
!! for the current model
!! V. Masson 01/2004 removes surface (externalization)
!! J.-P. Pinty 06/05/04 treat NSV_* for C1R3 and ELEC
!! 05/06 Remove EPS
!! M. Leriche 04/10 add pH in cloud water and rainwater
!! M. Leriche 07/10 treat NSV_* for ice phase chemical species
!! M.Tomasini,
!! P. Peyrille 06/12 2D west african monsoon : add reading of ADV forcing and addy fluxes
!! C.Lac 03/13 add prognostic supersaturation for C2R2/KHKO
!! Bosseur & Filippi 07/13 Adds Forefire
!! M. Leriche 11/14 correct bug in pH initialization
!! C.Lac 12/14 correction for reproducibility START/RESTA
!! M. Leriche 02/16 treat gas and aq. chemicals separately
!! C.Lac 10/16 CEN4TH with RKC4 + Correction on RK loop
!! 09/2017 Q.Rodier add LTEND_UV_FRC
!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O

WAUTELET Philippe
committed
! V. Vionnet 07/17: add blowing snow scheme
! P. Wautelet 01/2019: corrected intent of PDUM,PDVM,PDWM (OUT->INOUT)

WAUTELET Philippe
committed
! P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments (bugfix: PPABSM was intent(OUT))

WAUTELET Philippe
committed
! S. Bielli 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

WAUTELET Philippe
committed
! B. Vie 06/2020: Add prognostic supersaturation for LIMA
! F. Auguste 02/2021: add fields necessary for IBM
! T. Nagel 02/2021: add fields necessary for turbulence recycling
! JL. Redelsperger 03/2021: add necessary variables for Ocean LES case
! A. Costes 12/2021: add Blaze fire model

WAUTELET Philippe
committed
! P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables

RODIER Quentin
committed
!!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!

WAUTELET Philippe
committed
USE MODD_2D_FRC, ONLY: L2D_ADV_FRC, L2D_REL_FRC
USE MODD_ADV_n, ONLY: CTEMP_SCHEME, LSPLIT_CFL
USE MODD_BLOWSNOW_n, ONLY: XSNWCANO
USE MODD_CONF, ONLY: CCONF, CPROGRAM, L1D, LFORCING, NVERB
USE MODD_CONF_n, ONLY: IDX_RVT, IDX_RCT, IDX_RRT, IDX_RIT, IDX_RST, IDX_RGT, IDX_RHT
USE MODD_CST, ONLY: XALPW, XBETAW, XCPD, XGAMW, XMD, XMV, XP00, XRD
USE MODD_CTURB, ONLY: XTKEMIN

WAUTELET Philippe
committed
USE MODD_DYN_n, ONLY: LOCEAN

WAUTELET Philippe
committed
use modd_field, only: tfieldmetadata, tfieldlist, NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED, &
TYPEDATE, TYPEREAL, TYPELOG, TYPEINT
USE MODD_FIELD_n, only: XZWS_DEFAULT
USE MODD_FIRE, ONLY: CWINDFILTER, LBLAZE, LRESTA_ASE, LRESTA_AWC, LRESTA_EWAM, LRESTA_WLIM, LWINDFILTER

WAUTELET Philippe
committed
USE MODD_IBM_PARAM_n, ONLY: LIBM

WAUTELET Philippe
committed
USE MODD_IO, ONLY: TFILEDATA

WAUTELET Philippe
committed
USE MODD_LATZ_EDFLX, ONLY: LTH_FLX, LUV_FLX
USE MODD_LUNIT_N, ONLY: TLUOUT

WAUTELET Philippe
committed
USE MODD_NSV, ONLY: NSV, NSV_C2R2BEG, NSV_C2R2END, NSV_CSBEG, NSV_CSEND, &
#ifdef MNH_FOREFIRE
NSV_FFBEG, NSV_FFEND, &
#endif
NSV_PPBEG, NSV_PPEND, NSV_SNW, NSV_USER, TSVLIST
USE MODD_OCEANH, ONLY: NFRCLT, NINFRT, XSSOLA_T, XSSUFL_T, XSSTFL_T, XSSVFL_T

WAUTELET Philippe
committed
USE MODD_PARAMETERS, ONLY: XUNDEF

WAUTELET Philippe
committed
USE MODD_PARAM_n, ONLY: CSCONV

WAUTELET Philippe
committed
USE MODD_RECYCL_PARAM_n, ONLY: LRECYCLE, LRECYCLN, LRECYCLS, LRECYCLW, NR_COUNT

WAUTELET Philippe
committed
USE MODD_REF, ONLY: LCOUPLES

WAUTELET Philippe
committed
USE MODD_TIME, ONLY: DATE_TIME

WAUTELET Philippe
committed
use mode_field, only: Find_field_id_from_mnhname

WAUTELET Philippe
committed
USE MODE_IO_FIELD_READ, only: IO_Field_read

WAUTELET Philippe
committed
USE MODE_MSG
USE MODE_TOOLS, ONLY: UPCASE

WAUTELET Philippe
committed
USE MODI_INI_LB
USE MODI_INI_LS
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
!
!

WAUTELET Philippe
committed
INTEGER, INTENT(IN) :: KOCEMI !Ocan model index
TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file

WAUTELET Philippe
committed
INTEGER, INTENT(IN) :: KIU, KJU, KKU
! array sizes in x, y and z directions
!
CHARACTER (LEN=*), INTENT(IN) :: HGETTKET, &
HGETRVT,HGETRCT,HGETRRT, &
HGETRIT,HGETRST,HGETRGT,HGETRHT, &
HGETCIT,HGETSRCT, HGETZWS, &
HGETSIGS, HGETCLDFR, HGETICEFR, &
HGETBL_DEPTH, HGETSBL_DEPTH, &
HGETPHC, HGETPHR
CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVT
!
! GET indicators to know wether a given variable should or not be read in the
! FM file at time t-deltat and t
!
CHARACTER(LEN=6), INTENT(IN) :: HUVW_ADV_SCHEME ! advection scheme for wind
CHARACTER(LEN=4), INTENT(IN) :: HTEMP_SCHEME ! advection scheme for wind
! sizes of the West-east total LB area
INTEGER, INTENT(IN) :: KSIZELBX_ll,KSIZELBXU_ll ! for T,V,W and u
INTEGER, INTENT(IN) :: KSIZELBXTKE_ll ! for TKE
INTEGER, INTENT(IN) :: KSIZELBXR_ll,KSIZELBXSV_ll ! for Rx and SV
! sizes of the North-south total LB area
INTEGER, INTENT(IN) :: KSIZELBY_ll,KSIZELBYV_ll ! for T,U,W and v
INTEGER, INTENT(IN) :: KSIZELBYTKE_ll ! for TKE
INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll ! for Rx and SV
!
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PUM,PVM,PWM ! U,V,W at t-dt

WAUTELET Philippe
committed
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDUM,PDVM,PDWM ! Difference on U,V,W
REAL, DIMENSION(:,:), INTENT(OUT) :: PBL_DEPTH ! BL depth
REAL, DIMENSION(:,:), INTENT(OUT) :: PSBL_DEPTH ! SBL depth
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTHVMF ! MassFlux buoyancy flux
!
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PUT,PVT,PWT ! U,V,W at t
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PTHT,PTKET ! theta, tke and
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRTKEMS ! tke adv source
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPABST ! pressure at t
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PRT,PSVT ! moist and scalar
! variables at t
REAL, DIMENSION(:,:), INTENT(INOUT) :: PZWS
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCT ! turbulent flux
! <s'Rc'> at t
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCIT ! ice conc. at t
REAL, INTENT(OUT) :: PDRYMASST ! Md(t)

RODIER Quentin
committed
REAL, INTENT(OUT) :: PDRYMASSS ! d Md(t) / dt
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS ! =sqrt(<s's'>) for the
! Subgrid Condensation
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! cloud fraction
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PICEFR ! cloud fraction
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHC ! pH value in cloud water
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHR ! pH value in rainwater
!
!
! Larger Scale fields

RODIER Quentin
committed
REAL, DIMENSION(:,:), INTENT(OUT) :: PLSZWSM ! significant height of sea waves
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLSUM,PLSVM,PLSWM ! Wind
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLSTHM, PLSRVM ! Mass
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Wind
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTHM ! Mass
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYUM,PLBYVM,PLBYWM ! Wind
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYTHM ! Mass
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBXTKEM ! TKE
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLBYTKEM
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBXRM ,PLBXSVM ! Moisture and SV
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBYRM ,PLBYSVM ! in x and y-dir.
!
!
! Forcing fields
INTEGER, INTENT(IN) :: KFRC ! number of forcing
TYPE (DATE_TIME), DIMENSION(:), INTENT(OUT) :: TPDTFRC ! date of forcing profs.
REAL, DIMENSION(:,:), INTENT(OUT) :: PUFRC,PVFRC,PWFRC ! forcing variables
REAL, DIMENSION(:,:), INTENT(OUT) :: PTHFRC,PRVFRC
REAL, DIMENSION(:,:), INTENT(OUT) :: PTENDUFRC,PTENDVFRC
REAL, DIMENSION(:,:), INTENT(OUT) :: PTENDTHFRC,PTENDRVFRC,PGXTHFRC,PGYTHFRC
REAL, DIMENSION(:), INTENT(OUT) :: PPGROUNDFRC
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PATC
INTEGER, INTENT(IN) :: KADVFRC ! number of forcing
TYPE (DATE_TIME), DIMENSION(:), INTENT(OUT) :: TPDTADVFRC ! date of forcing profs.
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PDTHFRC, PDRVFRC
INTEGER, INTENT(IN) :: KRELFRC ! number of forcing
TYPE (DATE_TIME), DIMENSION(:), INTENT(OUT) :: TPDTRELFRC ! date of forcing profs.
REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PTHREL, PRVREL
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M ! Eddy fluxes
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS_PRES, PRVS_PRES, PRWS_PRES
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRTHS_CLD
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS_CLD, PRSVS_CLD

RODIER Quentin
committed
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PIBM_LSF ! LSF for IBM
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PIBM_XMUT ! Turbulent viscosity
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANW,PVMEANW,PWMEANW ! Velocity average at West boundary
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANN,PVMEANN,PWMEANN ! Velocity average at North boundary
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANE,PVMEANE,PWMEANE ! Velocity average at East boundary
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PUMEANS,PVMEANS,PWMEANS ! Velocity average at South boundary
! Fire Model fields
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLSPHI ! Fire Model Level Set function Phi [-]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PBMAP ! Fire Model Burning map [s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMASE ! Fire Model Available Sensible Energy [J/m2]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMAWC ! Fire Model Available Water Content [kg/m2]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMWINDU ! Fire Model filtered u wind [m/s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMWINDV ! Fire Model filtered v wind [m/s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMWINDW ! Fire Model filtered v wind [m/s]
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFMHWS ! Fire Model filtered horizontal wind speed [m/s]
!
!* 0.2 declarations of local variables
!
INTEGER :: IID
INTEGER :: ILUOUT ! Unit number for prints
INTEGER :: IRESP
INTEGER :: ISV ! total number of scalar variables
INTEGER :: JSV ! Loop index for additional scalar variables
INTEGER :: JKLOOP,JRR ! Loop indexes
INTEGER :: IIUP,IJUP ! size of working window arrays
INTEGER :: JT ! loop index
LOGICAL :: GLSOURCE ! switch for the source term (for ini_ls and ini_lb)

RODIER Quentin
committed
LOGICAL :: ZLRECYCL ! switch if turbulence recycling is activated

WAUTELET Philippe
committed
LOGICAL :: GOLDFILEFORMAT
CHARACTER(LEN=3) :: YFRC ! To mark the different forcing dates

WAUTELET Philippe
committed
CHARACTER(LEN=3) :: YNUM3
CHARACTER(LEN=15) :: YVAL
REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK ! to compute supersaturation

WAUTELET Philippe
committed
TYPE(TFIELDMETADATA) :: TZFIELD
!-------------------------------------------------------------------------------
!
!* 1. INITIALIZATION
! ---------------
!
GLSOURCE=.FALSE.
ZWORK = 0.0
!

WAUTELET Philippe
committed
!If TPINIFILE file was written with a MesoNH version < 5.6, some variables had different names or were not available
GOLDFILEFORMAT = ( TPINIFILE%NMNHVERSION(1) < 5 &
.OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 6 ) )
!-------------------------------------------------------------------------------
!
!* 2. READ PROGNOSTIC VARIABLES
! -------------------------
!

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'UM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PUT)

WAUTELET Philippe
committed
!
CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'VM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PVT)

WAUTELET Philippe
committed
!
CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'WM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PWT)

WAUTELET Philippe
committed
!
CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'THM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PTHT)

WAUTELET Philippe
committed
!
CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'PABSM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PPABST)

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'UT',PUT)
CALL IO_Field_read(TPINIFILE,'VT',PVT)
CALL IO_Field_read(TPINIFILE,'WT',PWT)
CALL IO_Field_read(TPINIFILE,'THT',PTHT)
CALL IO_Field_read(TPINIFILE,'PABST',PPABST)

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('TKET',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'TKEM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PTKET)

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'TKET',PTKET)

WAUTELET Philippe
committed
IF ( ( (TPINIFILE%NMNHVERSION(1)==5 .AND. TPINIFILE%NMNHVERSION(2)>0) .OR. TPINIFILE%NMNHVERSION(1)>5 ) &
.AND. (CCONF == 'RESTA') .AND. LSPLIT_CFL) THEN

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'TKEMS',PRTKEMS)
PTKET(:,:,:) = XTKEMIN
PRTKEMS(:,:,:) = 0.

RODIER Quentin
committed
SELECT CASE(HGETZWS)
CASE('READ')
CALL IO_Field_read(TPINIFILE,'ZWS',PZWS,IRESP)
!If the field ZWS is not in the file, set its value to XZWS_DEFAULT
!ZWS is present in files since MesoNH 5.4.2
IF ( IRESP/=0 ) THEN
WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
CALL PRINT_MSG(NVERB_WARNING,'IO','READ_FIELD','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
PZWS(:,:) = XZWS_DEFAULT
END IF

RODIER Quentin
committed
CASE('INIT')
PZWS(:,:)=0.

RODIER Quentin
committed
END SELECT
!

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RVM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RVT))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RVT',PRT(:,:,:,IDX_RVT))
PRT(:,:,:,IDX_RVT) = 0.

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RCM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RCT))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RCT',PRT(:,:,:,IDX_RCT))

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RRM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RRT))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RRT',PRT(:,:,:,IDX_RRT))
END SELECT
!
SELECT CASE(HGETRIT) ! cloud ice

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RIM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RIT))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RIT',PRT(:,:,:,IDX_RIT))
PRT(:,:,:,IDX_RIT) = 0.
END SELECT
!
SELECT CASE(HGETRST) ! snow

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RSM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RST))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RST',PRT(:,:,:,IDX_RST))
PRT(:,:,:,IDX_RST) = 0.
END SELECT
!
SELECT CASE(HGETRGT) ! graupel
CASE('READ')

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RGM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RGT))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RGT',PRT(:,:,:,IDX_RGT))
PRT(:,:,:,IDX_RGT) = 0.

WAUTELET Philippe
committed
IF (TPINIFILE%NMNHVERSION(1)<5) THEN

WAUTELET Philippe
committed
CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID,IRESP)

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( TFIELDLIST(IID) )

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = 'RHM'

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RHT))

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,'RHT',PRT(:,:,:,IDX_RHT))
PRT(:,:,:,IDX_RHT) = 0.
END SELECT
!
SELECT CASE(HGETCIT) ! ice concentration
CASE('READ')

WAUTELET Philippe
committed
IF (SIZE(PCIT) /= 0 ) CALL IO_Field_read(TPINIFILE,'CIT',PCIT)
CASE('INIT')
PCIT(:,:,:)=0.
END SELECT
!

RODIER Quentin
committed
IF (LIBM .AND. CPROGRAM=='MESONH') THEN
!
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'LSFP', &
CLONGNAME = 'LSFP', &
CSTDNAME = '', &
CUNITS = 'm', &
CDIR = 'XY', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
LTIMEDEP = .TRUE. )

RODIER Quentin
committed
!
CALL IO_Field_read(TPINIFILE,TZFIELD,PIBM_LSF)
!
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'XMUT', &
CLONGNAME = 'XMUT', &
CSTDNAME = '', &
CUNITS = 'm2 s-1', &
CDIR = 'XY', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
LTIMEDEP = .TRUE. )

RODIER Quentin
committed
!
CALL IO_Field_read(TPINIFILE,TZFIELD,PIBM_XMUT)
!
ENDIF
!
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'RECYCLING', &
CLONGNAME = 'RECYCLING', &
CSTDNAME = '', &
CUNITS = '', &
CDIR = '--', &
CCOMMENT = '', &
NGRID = 1, &
NTYPE = TYPELOG, &
NDIMS = 0, &
LTIMEDEP = .FALSE. )

WAUTELET Philippe
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,ZLRECYCL,IRESP)
!If field not found (file from older version of MesoNH) => set ZLRECYCL to false
IF ( IRESP /= 0 ) ZLRECYCL = .FALSE.

RODIER Quentin
committed
IF (ZLRECYCL) THEN
!
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'RCOUNT', &
CLONGNAME = 'RCOUNT', &
CSTDNAME = '', &
CUNITS = '', &
CDIR = '--', &
NGRID = 1, &
NTYPE = TYPEINT, &
NDIMS = 0, &
LTIMEDEP = .TRUE., &
CCOMMENT = 'Incremental counter for averaging purpose' )
CALL IO_Field_read(TPINIFILE,TZFIELD,NR_COUNT)

RODIER Quentin
committed
!
IF (NR_COUNT .NE. 0) THEN

RODIER Quentin
committed
IF (LRECYCLW) THEN

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'URECYCLW', &
CLONGNAME = 'URECYCLW', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 2, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'UMEAN-WEST side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PUMEANW)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'VRECYCLW', &
CLONGNAME = 'VRECYCLW', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 3, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'VMEAN-WEST side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PVMEANW)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'WRECYCLW', &
CLONGNAME = 'WRECYCLW', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 4, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'WMEAN-WEST side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PWMEANW)
!
ENDIF
IF (LRECYCLN) THEN

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'URECYCLN', &
CLONGNAME = 'URECYCLN', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 2, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'UMEAN-NORTH side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PUMEANN)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'VRECYCLN', &
CLONGNAME = 'VRECYCLN', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 3, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'VMEAN-NORTH side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PVMEANN)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'WRECYCLN', &
CLONGNAME = 'WRECYCLN', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 4, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'WMEAN-NORTH side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PWMEANN)
!
ENDIF
IF (LRECYCLE) THEN

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'URECYCLE', &
CLONGNAME = 'URECYCLE', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 2, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'UMEAN-EAST side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PUMEANE)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'VRECYCLE', &
CLONGNAME = 'VRECYCLE', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 3, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'VMEAN-EAST side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PVMEANE)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'WRECYCLE', &
CLONGNAME = 'WRECYCLE', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 4, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'WMEAN-EAST side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PWMEANE)
!
ENDIF
IF (LRECYCLS) THEN

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'URECYCLS', &
CLONGNAME = 'URECYCLS', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 2, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'UMEAN-SOUTH side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PUMEANS)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'VRECYCLS', &
CLONGNAME = 'VRECYCLS', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 3, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'VMEAN-SOUTH side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PVMEANS)
!

WAUTELET Philippe
committed
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'WRECYCLS', &
CLONGNAME = 'WRECYCLS', &
CSTDNAME = '', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
NGRID = 4, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NOTLISTED ], &
LTIMEDEP = .TRUE., &
CCOMMENT = 'WMEAN-SOUTH side plan for recycling purpose' )

RODIER Quentin
committed
CALL IO_Field_read(TPINIFILE,TZFIELD,PWMEANS)
ENDIF
ENDIF
ENDIF
! Blaze fire model
IF (LBLAZE .AND. CCONF=='RESTA') THEN
! Blaze is not compliant with MNHVERSION(1)<5
! Blaze begins with MNH 5.3.1
CALL IO_Field_read(TPINIFILE,'LSPHI',PLSPHI,IRESP)
IF (IRESP /= 0) PLSPHI(:,:,:) = 0.
CALL IO_Field_read(TPINIFILE,'BMAP',PBMAP,IRESP)
IF (IRESP /= 0) PBMAP(:,:,:) = -1.
CALL IO_Field_read(TPINIFILE,'FMASE',PFMASE,IRESP)
IF(IRESP == 0) THEN
! flag for the use of restart value for ASE initialization
LRESTA_ASE = .TRUE.
ELSE
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PFMASE set to 0' )
PFMASE(:,:,:) = 0.
END IF
CALL IO_Field_read(TPINIFILE,'FMAWC',PFMAWC,IRESP)
! flag for the use of restart value for AWC initialization
IF(IRESP == 0) THEN
LRESTA_AWC = .TRUE.
ELSE
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PFMAWC set to 0' )
PFMAWC(:,:,:) = 0.
END IF
! read wind on fire grid if present
IF (LWINDFILTER) THEN
! read in file only if wind filtering is required
SELECT CASE(CWINDFILTER)
CASE('EWAM')
! read u
CALL IO_Field_read(TPINIFILE,'FMWINDU',PFMWINDU,IRESP)
! flag for EWAM filtered u wind
IF(IRESP == 0) THEN
LRESTA_EWAM = .TRUE.
ELSE
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PFMWINDU set to 0' )
PFMWINDU(:,:,:) = 0.
END IF
! read v
CALL IO_Field_read(TPINIFILE,'FMWINDV',PFMWINDV,IRESP)
! flag for EWAM filtered v wind
IF(IRESP == 0 .AND. LRESTA_EWAM) THEN
! u and v fields found
LRESTA_EWAM = .TRUE.
ELSE
! u or v fields NOT found
LRESTA_EWAM = .FALSE.
END IF
IF (IRESP /= 0) THEN
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PFMWINDV set to 0' )
PFMWINDV(:,:,:) = 0.
END IF
! read w
CALL IO_Field_read(TPINIFILE,'FMWINDW',PFMWINDW,IRESP)
! flag for EWAM filtered w wind
IF(IRESP == 0 .AND. LRESTA_EWAM) THEN
! u and v and w fields found
LRESTA_EWAM = .TRUE.
ELSE
! u or v or w fields NOT found
LRESTA_EWAM = .FALSE.
END IF
IF (IRESP /= 0) THEN
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PFMWINDW set to 0' )
PFMWINDW(:,:,:) = 0.
END IF
CASE('WLIM')
CALL IO_Field_read(TPINIFILE,'FMHWS',PFMHWS,IRESP)
! flag for WLIM filtered horizontal wind speed
IF(IRESP == 0) THEN
LRESTA_WLIM = .TRUE.
ELSE
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PFMHWS set to 0' )
PFMHWS(:,:,:) = 0.
END IF
END SELECT
END IF
END IF
! Scalar Variables Reading : Users, C2R2, C1R3, LIMA, ELEC, Chemical SV

WAUTELET Philippe
committed
DO JSV = 1, NSV ! initialize according to the get indicators
SELECT CASE( HGETSVT(JSV) )
CASE ('READ')
TZFIELD = TSVLIST(JSV)

WAUTELET Philippe
committed
IF ( GOLDFILEFORMAT ) THEN
IF ( ( JSV >= 1 .AND. JSV <= NSV_USER ) .OR. &

WAUTELET Philippe
committed
( JSV >= NSV_PPBEG .AND. JSV <= NSV_PPEND ) .OR. &
#ifdef MNH_FOREFIRE
( JSV >= NSV_FFBEG .AND. JSV <= NSV_FFEND ) .OR. &
#endif

WAUTELET Philippe
committed
( JSV >= NSV_CSBEG .AND. JSV <= NSV_CSEND ) ) THEN

WAUTELET Philippe
committed
!Some variables were written with an other name in MesoNH < 5.6

WAUTELET Philippe
committed
WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CSTDNAME = ''
TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
ELSE
!Scalar variables were written with a T suffix in older versions
TZFIELD%CMNHNAME = TRIM( TZFIELD%CMNHNAME ) // 'T'
TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
END IF

WAUTELET Philippe
committed
END IF
CALL IO_Field_read( TPINIFILE, TZFIELD, PSVT(:,:,:,JSV), IRESP )
IF ( IRESP /= 0 ) THEN
CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PSVT set to 0 for ' // TRIM( TZFIELD%CMNHNAME ) )
PSVT(:,:,:,JSV) = 0.

WAUTELET Philippe
committed
END IF
CASE ('INIT')
PSVT(:,:,:,JSV) = 0.
IF ( JSV == NSV_C2R2END ) THEN
IF ( LSUPSAT .AND. (HGETRVT == 'READ') ) THEN

WAUTELET Philippe
committed
ZWORK(:,:,:) = (PPABST(:,:,:)/XP00 )**(XRD/XCPD)
ZWORK(:,:,:) = PTHT(:,:,:)*ZWORK(:,:,:)

WAUTELET Philippe
committed
ZWORK(:,:,:) = EXP(XALPW-XBETAW/ZWORK(:,:,:)-XGAMW*LOG(ZWORK(:,:,:)))

WAUTELET Philippe
committed
!rvsat
ZWORK(:,:,:) = (XMV / XMD)*ZWORK(:,:,:)/(PPABST(:,:,:)-ZWORK(:,:,:))