Forked from
Méso-NH / Méso-NH code
2345 commits behind the upstream repository.
-
WAUTELET Philippe authoredWAUTELET Philippe authored
ini_lb.f90 62.54 KiB
!MNH_LIC Copyright 1998-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.
!-----------------------------------------------------------------
! ######################
MODULE MODI_INI_LB
! ######################
!
INTERFACE
!
SUBROUTINE INI_LB(TPINIFILE,OLSOURCE,KSV, &
KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, &
KSIZELBXTKE_ll,KSIZELBYTKE_ll, &
KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, &
HGETTKEM,HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM, &
HGETRGM,HGETRHM,HGETSVM, &
PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, &
PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM, &
PLBXUMM,PLBXVMM,PLBXWMM,PLBXTHMM,PLBXTKEMM,PLBXRMM,PLBXSVMM, &
PLBYUMM,PLBYVMM,PLBYWMM,PLBYTHMM,PLBYTKEMM,PLBYRMM,PLBYSVMM, &
PLENG )
!
USE MODD_IO, ONLY: TFILEDATA
!
TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file
LOGICAL, INTENT(IN) :: OLSOURCE ! switch for the source term
! Larger Scale fields (source if OLSOURCE=T, fields at time t-dt if OLSOURCE=F) :
INTEGER, INTENT(IN) :: KSV ! number of passive variables
! 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
! Get indicators
CHARACTER (LEN=*), INTENT(IN) :: HGETTKEM, &
HGETRVM,HGETRCM,HGETRRM, &
HGETRIM,HGETRSM,HGETRGM,HGETRHM
CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVM
! LB fields (source if OLSOURCE=T, fields at time t-dt if OLSOURCE=F) :
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.
! LB arrays at time t-dt (if OLSOURCE=T) :
REAL, DIMENSION(:,:,:), INTENT(IN), OPTIONAL :: PLBXUMM,PLBXVMM,PLBXWMM ! Wind
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBXTHMM ! Mass
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBYUMM,PLBYVMM,PLBYWMM ! Wind
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBYTHMM ! Mass
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBXTKEMM ! TKE
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBYTKEMM
REAL, DIMENSION(:,:,:,:),INTENT(IN), OPTIONAL :: PLBXRMM ,PLBXSVMM ! Moisture and SV
REAL, DIMENSION(:,:,:,:),INTENT(IN), OPTIONAL :: PLBYRMM ,PLBYSVMM ! in x and y-dir.
REAL, INTENT(IN), OPTIONAL :: PLENG ! Interpolation length
!
END SUBROUTINE INI_LB
!
END INTERFACE
!
END MODULE MODI_INI_LB
! ############################################################
SUBROUTINE INI_LB(TPINIFILE,OLSOURCE,KSV, &
KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, &
KSIZELBXTKE_ll,KSIZELBYTKE_ll, &
KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, &
HGETTKEM,HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM, &
HGETRGM,HGETRHM,HGETSVM, &
PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, &
PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM, &
PLBXUMM,PLBXVMM,PLBXWMM,PLBXTHMM,PLBXTKEMM,PLBXRMM,PLBXSVMM, &
PLBYUMM,PLBYVMM,PLBYWMM,PLBYTHMM,PLBYTKEMM,PLBYRMM,PLBYSVMM, &
PLENG )
! ############################################################
!
!!**** *INI_LB* - routine to initialize LB fields
!!
!! PURPOSE
!! -------
! The purpose of this routine is to read the LB fields and to distribute
! on subdomain which have a non-nul intersection with the LB areas.
! In case of OLSOURCE=T, it initializes the LB sources instead of the
! LB fields at time t-dt
!
!!** METHOD
!! ------
!! The LB fields are read in file and distributed by FMREAD_LB
!!
!! In case of OLSOURCE=T (INI_LB called by INI_CPL or LS_COUPLING), the LB sources
!! are computed
!!
!!
!! EXTERNAL
!! --------
!! FMREAD : to read data in LFIFM file
!! FMREAD_LB : to read LB data in LFIFM file
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_CONF : NVERB
!!
!! REFERENCE
!! ---------
!! Book2 of the documentation (routine INI_LB)
!!
!!
!! AUTHOR
!! ------
!! V. Ducrocq * Meteo France *
!! D. Gazen L.A.
!!
!! MODIFICATIONS
!! -------------
!! Original 22/09/98 FMREAD_LB handle LBs fields
!! J. Stein 18/09/99 problem with the dry case
!! D. Gazen 22/01/01 treat NSV_* with floating indices
!! F Gheusi 29/10/03 bug in LB sources for NSV
!! J.-P. Pinty 06/05/04 treat NSV_* for C1R3 and ELEC
!! 20/05/06 Remove KEPS
!! C.Lac 20/03/08 Add passive pollutants
!! M.Leriche 16/07/10 Add ice phase chemical species
!! Pialat/tulet 15/02/12 Add ForeFire scalars
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!! M.Leriche 09/02/16 Treat gas and aq. chemicals separately
!! J.Escobar : 27/04/2016 : bug , test only on ANY(HGETSVM({{1:KSV}})=='READ'
!! J.-P. Pinty 09/02/16 Add LIMA that is LBC for CCN and IFN
!! M.Leriche 09/02/16 Treat gas and aq. chemicals separately
!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
! P. Wautelet 13/02/2019: initialize PLBXSVM and PLBYSVM in all cases
! P. Wautelet 14/02/2019: move UPCASE function to tools.f90
!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
!
USE MODD_CH_AEROSOL
USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES
USE MODD_CTURB
USE MODD_CONF
USE MODD_DUST
USE MODD_ELEC_DESCR, ONLY: CELECNAMES
use modd_field, only: tfieldmetadata, TYPELOG, TYPEREAL
USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES
USE MODD_IO, ONLY: TFILEDATA
USE MODD_LG, ONLY: CLGNAMES
USE MODD_LUNIT_n, ONLY: TLUOUT
USE MODD_NSV
USE MODD_PARAMETERS, ONLY: JPHEXT,NMNHNAMELGTMAX
USE MODD_PARAM_LIMA
USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES
USE MODD_PARAM_n
USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
USE MODD_SALT
!
USE MODE_IO_FIELD_READ, only: IO_Field_read, IO_Field_read_lb
USE MODE_MSG
USE MODE_TOOLS, ONLY: UPCASE
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
!
!
TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file
LOGICAL, INTENT(IN) :: OLSOURCE ! switch for the source term
! Larger Scale fields (source if OLSOURCE=T, fields at time t-dt if OLSOURCE=F) :
INTEGER, INTENT(IN) :: KSV ! number of passive variables
! 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
! Get indicators
CHARACTER (LEN=*), INTENT(IN) :: HGETTKEM, &
HGETRVM,HGETRCM,HGETRRM, &
HGETRIM,HGETRSM,HGETRGM,HGETRHM
CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVM
! LB fields (source if OLSOURCE=T, fields at time t-dt if OLSOURCE=F) :
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.
! LB arrays at time t-dt (if OLSOURCE=T) :
REAL, DIMENSION(:,:,:), INTENT(IN), OPTIONAL :: PLBXUMM,PLBXVMM,PLBXWMM ! Wind
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBXTHMM ! Mass
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBYUMM,PLBYVMM,PLBYWMM ! Wind
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBYTHMM ! Mass
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBXTKEMM ! TKE
REAL, DIMENSION(:,:,:),INTENT(IN), OPTIONAL :: PLBYTKEMM
REAL, DIMENSION(:,:,:,:),INTENT(IN), OPTIONAL :: PLBXRMM ,PLBXSVMM ! Moisture and SV
REAL, DIMENSION(:,:,:,:),INTENT(IN), OPTIONAL :: PLBYRMM ,PLBYSVMM ! in x and y-dir.
REAL, INTENT(IN), OPTIONAL :: PLENG ! Interpolation length
!
!
!* 0.2 declarations of local variables
!
INTEGER :: ILBSIZEX,ILBSIZEY ! depth of the LB area in the RIM direction
! written in FM file
INTEGER :: IL3DX,IL3DY ! Size of the LB arrays in FM file
! in the RIM direction
INTEGER :: IL3DXU,IL3DYV ! Size of the LB arrays in FM file
! in the RIM direction for the normal wind
INTEGER :: IRIMX,IRIMY ! Total size of the LB area (for the RIM direction)
INTEGER :: IRIMXU,IRIMYV ! Total size of the LB area (for the RIM direction)
! for the normal wind (spatial gradient needed)
INTEGER :: JSV,JRR ! Loop index for MOIST AND
! additional scalar variables
INTEGER :: IRR ! counter for moist variables
INTEGER :: IRESP
INTEGER :: ILUOUT ! Logical unit number associated with TLUOUT
LOGICAL :: GHORELAX_UVWTH ! switch for the horizontal relaxation for U,V,W,TH in the FM file
LOGICAL :: GHORELAX_TKE ! switch for the horizontal relaxation for tke in the FM file
LOGICAL :: GHORELAX_R, GHORELAX_SV ! switch for the horizontal relaxation
! for moist and scalar variables
CHARACTER (LEN= LEN(HGETRVM)), DIMENSION (7) :: YGETRXM ! Arrays with the get indicators
! for the moist variables
CHARACTER (LEN=1), DIMENSION (7) :: YC ! array with the prefix of the moist variables
CHARACTER(LEN=2) :: INDICE ! to index CCN and IFN fields of LIMA scheme
TYPE(TFIELDMETADATA) :: TZFIELD
!-------------------------------------------------------------------------------
!
!
!* 0. READ CPL_AROME to know which LB_fileds there are to read
! --------------------
IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>8) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
CALL IO_Field_read(TPINIFILE,'CPL_AROME',LCPL_AROME)
ELSE
LCPL_AROME=.FALSE.
ENDIF
!
!
!* 1. SOME INITIALIZATIONS
! --------------------
!
ILUOUT = TLUOUT%NLU
!
!
!-------------------------------------------------------------------------------
!
!* 2. READ 2D "surfacic" LB fields
! ----------------------------
!
!* 2.1 read the number of available points for the horizontal relaxation
! for basic variables
CALL IO_Field_read(TPINIFILE,'RIMX',ILBSIZEX)
CALL IO_Field_read(TPINIFILE,'RIMY',ILBSIZEY)
!
!* 2.2 Basic variables
!
CALL IO_Field_read(TPINIFILE,'HORELAX_UVWTH',GHORELAX_UVWTH)
!
IF (GHORELAX_UVWTH) THEN
IRIMX =(KSIZELBX_ll-2*JPHEXT)/2
IRIMXU=(KSIZELBXU_ll-2*JPHEXT)/2
IRIMY =(KSIZELBY_ll-2*JPHEXT)/2
IRIMYV=(KSIZELBYV_ll-2*JPHEXT)/2
IL3DX=2*ILBSIZEX+2*JPHEXT
IL3DXU=IL3DX
IL3DY=2*ILBSIZEY+2*JPHEXT
IL3DYV=IL3DY
ELSE
IRIMX=0
IRIMXU=1
IRIMY=0
IRIMYV=1
IL3DX=2*JPHEXT ! 2
IL3DY=2*JPHEXT ! 2
IL3DXU=2 + 2*JPHEXT ! 4
IL3DYV=2 + 2*JPHEXT ! 4
ENDIF
!
IF (KSIZELBXU_ll/= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
END IF
IF ( KSIZELBX_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
ENDIF
IF ( KSIZELBX_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
END IF
IF ( KSIZELBY_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
END IF
IF ( KSIZELBYV_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
END IF
IF (KSIZELBY_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
END IF
IF (KSIZELBX_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
END IF
IF ( KSIZELBY_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
END IF
!
!* 2.3 LB-TKE
!
SELECT CASE(HGETTKEM)
CASE('READ')
IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
IF (PRESENT(PLBXTKEMM).AND.PRESENT(PLBYTKEMM)) THEN
WRITE ( ILUOUT,*) 'LBXTKES AND LBYTKES WILL BE INITIALIZED TO 0'
PLBXTKEM(:,:,:) = PLBXTKEMM(:,:,:)
PLBYTKEM(:,:,:) = PLBYTKEMM(:,:,:)
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize LBXTKES and LBYTKES')
ENDIF
ELSE
CALL IO_Field_read(TPINIFILE,'HORELAX_TKE',GHORELAX_TKE)
IF (GHORELAX_TKE) THEN
IRIMX=(KSIZELBXTKE_ll-2*JPHEXT)/2
IRIMY=(KSIZELBYTKE_ll-2*JPHEXT)/2
IL3DX=2*ILBSIZEX+2*JPHEXT
IL3DY=2*ILBSIZEY+2*JPHEXT
ELSE
IRIMX=0
IRIMY=0
IL3DX=2*JPHEXT ! 2
IL3DY=2*JPHEXT ! 2
ENDIF
!
IF (KSIZELBXTKE_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBXTKEM',IL3DX,IRIMX,PLBXTKEM)
END IF
!
IF (KSIZELBYTKE_ll /= 0) THEN
CALL IO_Field_read_lb(TPINIFILE,'LBYTKEM',IL3DY,IRIMY,PLBYTKEM)
END IF
ENDIF
CASE('INIT')
IF (SIZE(PLBXTKEM,1) /= 0) PLBXTKEM(:,:,:) = XTKEMIN
IF (SIZE(PLBYTKEM,1) /= 0) PLBYTKEM(:,:,:) = XTKEMIN
END SELECT
!
!
!* 2.5 LB-Rx
!
IF(KSIZELBXR_ll > 0 ) THEN
TZFIELD = TFIELDMETADATA( &
CMNHNAME = 'HORELAX_R', &
CSTDNAME = '', &
CLONGNAME = 'HORELAX_R', &
CUNITS = '', &
CDIR = '--', &
CCOMMENT = 'Switch to activate the HOrizontal RELAXation', &
CLBTYPE = 'NONE', &
NGRID = 1, &
NTYPE = TYPELOG, &
NDIMS = 0, &
LTIMEDEP = .FALSE. )
!
CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_R)
!
YGETRXM(:)=(/HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM,HGETRGM,HGETRHM/)
YC(:)=(/"V","C","R","I","S","G","H"/)
IF (GHORELAX_R) THEN
IRIMX=(KSIZELBXR_ll-2*JPHEXT)/2
IRIMY= (KSIZELBYR_ll-2*JPHEXT)/2
IL3DX=2*ILBSIZEX+2*JPHEXT
IL3DY=2*ILBSIZEY+2*JPHEXT
ELSE
IRIMX=0
IRIMY=0
IL3DX=2*JPHEXT ! 2
IL3DY=2*JPHEXT ! 2
END IF
!
TZFIELD = TFIELDMETADATA( &
CUNITS = 'kg kg-1', &
CDIR = '', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
LTIMEDEP = .TRUE. )
!
IRR=0
JRR=1
SELECT CASE(YGETRXM(1))
CASE('READ')
IRR=IRR+1
IF ( KSIZELBXR_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBXR'//YC(JRR)//'M'
TZFIELD%CLONGNAME = 'LBXR'//YC(JRR)//'M'
TZFIELD%CLBTYPE = 'LBX'
TZFIELD%CCOMMENT = '2_Y_Z_LBXR'//YC(JRR)//'M'
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
END IF
!
IF ( KSIZELBYR_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBYR'//YC(JRR)//'M'
TZFIELD%CLONGNAME = 'LBYR'//YC(JRR)//'M'
TZFIELD%CLBTYPE = 'LBY'
TZFIELD%CCOMMENT = '2_Y_Z_LBYR'//YC(JRR)//'M'
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
END IF
CASE('INIT')
IRR=IRR+1
IF ( SIZE(PLBXRM,1) /= 0 ) PLBXRM(:,:,:,IRR) = 0.
IF ( SIZE(PLBYRM,1) /= 0 ) PLBYRM(:,:,:,IRR) = 0.
END SELECT
!
!
DO JRR=2,7
SELECT CASE(YGETRXM(JRR))
CASE('READ')
IRR=IRR+1
IF ( KSIZELBXR_ll /= 0 ) THEN
IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
IF (PRESENT(PLBXRMM)) THEN
PLBXRM(:,:,:,IRR)=PLBXRMM(:,:,:,IRR)
WRITE(ILUOUT,*) 'PLBXRS will be initialized to 0 for LBXR'//YC(JRR)//'M'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBXRM for LBXR'//YC(JRR)//'M')
ENDIF
ELSE
TZFIELD%CMNHNAME = 'LBXR'//YC(JRR)//'M'
TZFIELD%CLONGNAME = 'LBXR'//YC(JRR)//'M'
TZFIELD%CLBTYPE = 'LBX'
TZFIELD%CCOMMENT = '2_Y_Z_LBXR'//YC(JRR)//'M'
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
ENDIF
END IF
!
IF ( KSIZELBYR_ll /= 0 ) THEN
IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
IF (PRESENT(PLBYRMM)) THEN
PLBYRM(:,:,:,IRR)=PLBYRMM(:,:,:,IRR)
WRITE(ILUOUT,*) 'PLBYRS will be initialized to 0 for LBYR'//YC(JRR)//'M'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBYRM for LBYR'//YC(JRR)//'M')
ENDIF
ELSE
TZFIELD%CMNHNAME = 'LBYR'//YC(JRR)//'M'
TZFIELD%CLONGNAME = 'LBYR'//YC(JRR)//'M'
TZFIELD%CLBTYPE = 'LBY'
TZFIELD%CCOMMENT = '2_Y_Z_LBYR'//YC(JRR)//'M'
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
ENDIF
END IF
CASE('INIT')
IRR=IRR+1
IF ( SIZE(PLBXRM,1) /= 0 ) PLBXRM(:,:,:,IRR) = 0.
IF ( SIZE(PLBYRM,1) /= 0 ) PLBYRM(:,:,:,IRR) = 0.
END SELECT
END DO
END IF
!
!* 2.6 LB-Scalar Variables
!
PLBXSVM(:,:,:,:) = 0.
PLBYSVM(:,:,:,:) = 0.
!
IF (KSV > 0) THEN
IF (ANY(HGETSVM(1:KSV)=='READ')) THEN
TZFIELD%CMNHNAME = 'HORELAX_SV'
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'HORELAX_SV'
TZFIELD%CUNITS = ''
TZFIELD%CDIR = '--'
TZFIELD%CCOMMENT = ''
TZFIELD%CLBTYPE = 'NONE'
TZFIELD%NGRID = 0
TZFIELD%NTYPE = TYPELOG
TZFIELD%NDIMS = 0
TZFIELD%LTIMEDEP = .FALSE.
CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_SV)
IF ( GHORELAX_SV ) THEN
IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2
IRIMY=(KSIZELBYSV_ll-2*JPHEXT)/2
IL3DX=2*ILBSIZEX+2*JPHEXT
IL3DY=2*ILBSIZEY+2*JPHEXT
ELSE
IRIMX=0
IRIMY=0
IL3DX=2*JPHEXT !2
IL3DY=2*JPHEXT !2
END IF
END IF
END IF
! User scalar variables
IF (NSV_USER>0) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = 1, NSV_USER
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBXSVM',JSV
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'PLXYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBYSVM',JSV
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! C2R2 scalar variables
IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'm-3'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_C2R2BEG, NSV_C2R2END
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'C2R2 PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C2R2 PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'C2R2 PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C2R2 PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! C1R3 scalar variables
IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'm-3'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_C1R3BEG, NSV_C1R3END
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'C1R3 PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C1R3 PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'C1R3 PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C1R3 PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
!
! LIMA: CCN and IFN scalar variables
!
IF (CCLOUD=='LIMA' ) THEN
IF (NSV_LIMA_CCN_FREE+NMOD_CCN-1 >= NSV_LIMA_CCN_FREE) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'CCN PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE)
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'CCN PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
!
IF (NSV_LIMA_IFN_FREE+NMOD_IFN-1 >= NSV_LIMA_IFN_FREE) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'IFN PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE)
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'IFN PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
ENDIF
! ELEC scalar variables
IF (NSV_ELECEND>=NSV_ELECBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_ELECBEG, NSV_ELECEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'ELEC PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ELEC PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'ELEC PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ELEC PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Chemical gas phase scalar variables
IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_CHGSBEG, NSV_CHGSEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Chemical PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize gas phase chemical PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Chemical PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize gas phase chemical PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Chemical aqueous phase scalar variables
IF (NSV_CHACEND>=NSV_CHACBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_CHACBEG, NSV_CHACEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Chemical PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aqueous phase chemical PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Chemical PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aqueous phase chemical PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Chemical ice phase scalar variables
IF (NSV_CHICEND>=NSV_CHICBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_CHICBEG, NSV_CHICEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Ice phase chemical PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ice phase chemical PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Ice phase chemical PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ice phase chemical PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Orilam aerosol scalar variables
IF (NSV_AEREND>=NSV_AERBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_AERBEG, NSV_AEREND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Aerosol PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Aerosol PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Orilam aerosols moist scalar variables
IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_AERDEPBEG, NSV_AERDEPEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CDEAERNAMES(JSV-NSV_AERDEPBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Aerosol PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Aerosol PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Dust scalar variables
IF (NSV_DSTEND>=NSV_DSTBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_DSTBEG, NSV_DSTEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Dust PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Dust PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
!
IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_DSTDEPBEG, NSV_DSTDEPEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Dust Desposition PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Dust Depoistion PLBYSVM will be initialized to 0'
ELSE
WRITE(ILUOUT,*) 'Pb to initialize dust PLBYSVM '
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Sea salt scalar variables
IF (NSV_SLTEND>=NSV_SLTBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'ppp'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_SLTBEG, NSV_SLTEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Sea Salt PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize sea salt PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Sea Salt PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize sea salt PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Passive pollutant variables
IF (NSV_PPEND>=NSV_PPBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_PPBEG, NSV_PPEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_PP'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Passive pollutant PLBXSVM will be initialized to 0'
ELSE
PLBXSVM(:,:,:,JSV)=0.
WRITE(ILUOUT,*) 'Passive pollutant PLBXSVM will be initialized to 0'
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_PP'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Passive pollutant PLBYSVM will be initialized to 0'
ELSE
PLBYSVM(:,:,:,JSV)=0.
WRITE(ILUOUT,*) 'Passive pollutant PLBYSVM will be initialized to 0'
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
#ifdef MNH_FOREFIRE
! ForeFire scalar variables
IF (NSV_FFEND>=NSV_FFBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_FFBEG, NSV_FFEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_FF'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
WRITE(ILUOUT,*) 'ForeFire LBX_FF ', IRESP
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM will be initialized to 0'
ELSE
PLBXSVM(:,:,:,JSV)=0.
WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM will be initialized to 0'
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_FF'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
ELSE
PLBYSVM(:,:,:,JSV)=0.
WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
#endif
! Conditional sampling variables
IF (NSV_CSEND>=NSV_CSBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_CSBEG, NSV_CSEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_CS'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Conditional sampling LBXSVM will be initialized to 0'
ELSE
PLBXSVM(:,:,:,JSV)=0.
WRITE(ILUOUT,*) 'Conditional sampling PLBXSVM will be initialized to 0'
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_CS'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Conditional sampling PLBYSVM will be initialized to 0'
ELSE
PLBYSVM(:,:,:,JSV)=0.
WRITE(ILUOUT,*) 'Conditional sampling PLBYSVM will be initialized to 0'
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Linox scalar variables
IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'kg kg-1'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_LNOXBEG, NSV_LNOXEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_LINOX'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Linox PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize linox PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_LINOX'
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'Linox PLBYSVM will be initialized to 0'
ELSE
!calla bortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize linox PLBYSVM')
ENDIF
END IF
END IF
END IF
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
! Lagrangian variables
IF (NSV_LGEND>=NSV_LGBEG) THEN
TZFIELD%CSTDNAME = ''
TZFIELD%CUNITS = 'm'
TZFIELD%CDIR = ''
TZFIELD%NGRID = 1
TZFIELD%NTYPE = TYPEREAL
TZFIELD%NDIMS = 3
TZFIELD%LTIMEDEP = .TRUE.
!
DO JSV = NSV_LGBEG, NSV_LGEND
SELECT CASE(HGETSVM(JSV))
CASE ('READ')
IF ( KSIZELBXSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBX'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBXSVMM)) THEN
PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'lagrangian PLBXSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize lagrangian PLBXSVM')
ENDIF
END IF
END IF
END IF
!
IF (KSIZELBYSV_ll /= 0 ) THEN
TZFIELD%CMNHNAME = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CLBTYPE = 'LBY'
WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
IF (IRESP/=0) THEN
IF (PRESENT(PLBYSVMM)) THEN
PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
WRITE(ILUOUT,*) 'lagrangian PLBYSVM will be initialized to 0'
ELSE
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize lagrangian PLBYSVM')
ENDIF
END IF
END IF
END IF
!
CASE('INIT')
IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
END SELECT
END DO
END IF
!-------------------------------------------------------------------------------
!
!* 3. COMPUTE THE LB SOURCES
! -----------------------
!
! IN case of initialization of LB source terms (OLSOURCE=T) :
! xxxM are LB source terms
! xxxMM are LB fields at time t -dt
IF (OLSOURCE) THEN
IF (PRESENT(PLBXUMM).AND.PRESENT(PLBYUMM)) THEN
PLBXUM(:,:,:) = (PLBXUM(:,:,:) - PLBXUMM(:,:,:)) / PLENG
PLBYUM(:,:,:) = (PLBYUM(:,:,:) - PLBYUMM(:,:,:)) / PLENG
ENDIF
IF (PRESENT(PLBXVMM).AND.PRESENT(PLBYVMM)) THEN
PLBXVM(:,:,:) = (PLBXVM(:,:,:) - PLBXVMM(:,:,:)) / PLENG
PLBYVM(:,:,:) = (PLBYVM(:,:,:) - PLBYVMM(:,:,:)) / PLENG
ENDIF
IF (PRESENT(PLBXWMM).AND.PRESENT(PLBYWMM)) THEN
PLBXWM(:,:,:) = (PLBXWM(:,:,:) - PLBXWMM(:,:,:)) / PLENG
PLBYWM(:,:,:) = (PLBYWM(:,:,:) - PLBYWMM(:,:,:)) / PLENG
ENDIF
IF (PRESENT(PLBXTHMM).AND.PRESENT(PLBYTHMM)) THEN
PLBXTHM(:,:,:) = (PLBXTHM(:,:,:) - PLBXTHMM(:,:,:)) / PLENG
PLBYTHM(:,:,:) = (PLBYTHM(:,:,:) - PLBYTHMM(:,:,:)) / PLENG
ENDIF
IF (HGETTKEM =='READ') THEN
IF (PRESENT(PLBXTKEMM).AND.PRESENT(PLBYTKEMM)) THEN
PLBXTKEM(:,:,:) = (PLBXTKEM(:,:,:) - PLBXTKEMM(:,:,:)) / PLENG
PLBYTKEM(:,:,:) = (PLBYTKEM(:,:,:) - PLBYTKEMM(:,:,:)) / PLENG
ENDIF
ENDIF
IF (HGETTKEM =='INIT') THEN
PLBXTKEM(:,:,:) = 0.
PLBYTKEM(:,:,:) = 0.
ENDIF
! LB moist variables
IRR=0
IF (PRESENT(PLBXRMM).AND.PRESENT(PLBYRMM)) THEN
DO JRR=1,7
IF (YGETRXM(JRR) == 'READ') THEN
IRR=IRR+1
PLBXRM(:,:,:,IRR) = (PLBXRM(:,:,:,IRR) - PLBXRMM(:,:,:,IRR)) / PLENG
PLBYRM(:,:,:,IRR) = (PLBYRM(:,:,:,IRR) - PLBYRMM(:,:,:,IRR)) / PLENG
ENDIF
END DO
ENDIF
! LB-scalar variables
DO JSV=1,KSV
IF (HGETSVM(JSV) == 'READ') THEN
PLBXSVM(:,:,:,JSV) = (PLBXSVM(:,:,:,JSV) - PLBXSVMM(:,:,:,JSV)) / PLENG
PLBYSVM(:,:,:,JSV) = (PLBYSVM(:,:,:,JSV) - PLBYSVMM(:,:,:,JSV)) / PLENG
ENDIF
END DO
!
ENDIF
!
END SUBROUTINE INI_LB