From 1cd3f401b76ca0d4b007de494be4d80c692ea421 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 22 Sep 2017 11:36:34 +0200 Subject: [PATCH] Philippe 22/09/2017: IO: use IO_READ_FIELD (no more FMREADs) Warning: not fully tested --- src/MNH/check_zhat.f90 | 29 +- src/MNH/check_zs.f90 | 33 +- src/MNH/compare_dad.f90 | 161 +-- src/MNH/ini_lb.f90 | 1831 ++++++++++++++++++---------------- src/MNH/ini_prog_var.f90 | 180 ++-- src/MNH/init_for_convlfi.f90 | 165 +-- src/MNH/mnh2lpdm.f90 | 15 +- src/MNH/mnh2lpdm_ech.f90 | 63 +- src/MNH/mnh2lpdm_ini.f90 | 100 +- src/MNH/read_field.f90 | 946 ++++++++++-------- src/MNH/read_surf_mnh.f90 | 125 +-- src/MNH/spawn_field2.f90 | 565 +++++++---- 12 files changed, 2234 insertions(+), 1979 deletions(-) diff --git a/src/MNH/check_zhat.f90 b/src/MNH/check_zhat.f90 index ea44989be..6f0db0223 100644 --- a/src/MNH/check_zhat.f90 +++ b/src/MNH/check_zhat.f90 @@ -80,12 +80,14 @@ END MODULE MODI_CHECK_ZHAT USE MODE_FM ! USE MODD_CONF ! declaration modules +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_LUNIT USE MODD_GRID_n USE MODD_DIM_n USE MODD_PARAMETERS ! USE MODE_FMREAD +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME ! IMPLICIT NONE ! @@ -108,10 +110,8 @@ REAL :: ZLEN2 ! Decay scale for small-scale topogr ! INTEGER :: IRESP ! return-code if problems occured INTEGER :: ILUOUT0 ! logical unit for file CLUOUT0 -INTEGER :: IGRID,ILENCH ! File -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables LOGICAL :: GTHINSHELL +TYPE(TFILEDATA),POINTER :: TZFMFILE ! !------------------------------------------------------------------------------- ! @@ -122,20 +122,17 @@ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) !* 1. Reading grid and dimension ! -------------------------- ! -YRECFM='KMAX' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IKMAX,IGRID,ILENCH,YCOMMENT,IRESP) -ALLOCATE(ZZHAT(IKMAX+2*JPVEXT)) -YRECFM='ZHAT' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZZHAT,IGRID,ILENCH,YCOMMENT,IRESP) -YRECFM='THINSHELL' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',GTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_FILE_FIND_BYNAME(TRIM(HFMFILE),TZFMFILE,IRESP) ! -CALL FMREAD(HFMFILE,'MASDEV',CLUOUT0,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'KMAX',IKMAX) +ALLOCATE(ZZHAT(IKMAX+2*JPVEXT)) +CALL IO_READ_FIELD(TZFMFILE,'ZHAT',ZZHAT) +CALL IO_READ_FIELD(TZFMFILE,'THINSHELL',GTHINSHELL) +CALL IO_READ_FIELD(TZFMFILE,'MASDEV',IMASDEV) IF (IMASDEV<=46) THEN GSLEVE = .FALSE. ELSE - YRECFM='SLEVE' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',GSLEVE,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFMFILE,'SLEVE',GSLEVE) ENDIF ! !* 2. Check dimensions @@ -183,10 +180,8 @@ END IF ! ------------------------------------- ! IF ( GSLEVE .AND. LSLEVE ) THEN - YRECFM='LEN1' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZLEN1,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM='LEN2' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZLEN2,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFMFILE,'LEN1',ZLEN1) + CALL IO_READ_FIELD(TZFMFILE,'LEN2',ZLEN2) IF (ZLEN1 /= XLEN1 .OR. ZLEN2 /= XLEN2) THEN HDAD_NAME=' ' WRITE (ILUOUT0,*) '********************************************************' diff --git a/src/MNH/check_zs.f90 b/src/MNH/check_zs.f90 index 0bff2dd51..eb9f489ff 100644 --- a/src/MNH/check_zs.f90 +++ b/src/MNH/check_zs.f90 @@ -83,6 +83,7 @@ END MODULE MODI_CHECK_ZS ! ------------ ! USE MODD_CONF ! declaration modules +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_LUNIT USE MODD_GRID_n USE MODD_DIM_n @@ -91,6 +92,7 @@ USE MODD_NESTING ! USE MODE_FM USE MODE_FMREAD +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME ! IMPLICIT NONE ! @@ -109,9 +111,6 @@ INTEGER, INTENT(IN) :: KJINF ! domain, compared to the old ! INTEGER :: IRESP ! return-code if problems occured INTEGER :: ILUOUT0 ! logical unit for file CLUOUT0 -INTEGER :: IGRID,ILENCH ! File -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables ! INTEGER :: IDXRATIO = 0 ! aspect ratios during previous INTEGER :: IDYRATIO = 0 ! spawning (if any) @@ -124,6 +123,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZZS2 ! INTEGER :: IIMAXC ! inner dimensions of coarse INTEGER :: IJMAXC ! definition arrays INTEGER :: JI,JJ ! loop counters +TYPE(TFILEDATA),POINTER :: TZFMFILE !------------------------------------------------------------------------------- ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) @@ -133,8 +133,9 @@ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) !* 1. Reading of aspect ratios and dimensions ! --------------------------------------- ! -YRECFM='DXRATIO' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IDXRATIO,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_FILE_FIND_BYNAME(TRIM(HFMFILE),TZFMFILE,IRESP) +! +CALL IO_READ_FIELD(TZFMFILE,'DXRATIO',IDXRATIO,IRESP) IF ( IRESP /= 0 .OR. IDXRATIO == 0 ) THEN WRITE (ILUOUT0,*) '********************************************************' WRITE (ILUOUT0,*) 'resolution ratio in x direction not present in fmfile; no nesting allowed' @@ -143,8 +144,7 @@ IF ( IRESP /= 0 .OR. IDXRATIO == 0 ) THEN RETURN END IF ! -YRECFM='DYRATIO' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IDYRATIO,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'DYRATIO',IDYRATIO,IRESP) IF ( IRESP /= 0 .OR. IDYRATIO == 0 ) THEN WRITE (ILUOUT0,*) '********************************************************' WRITE (ILUOUT0,*) 'resolution ratio in y direction not present in fmfile; no nesting allowed' @@ -153,8 +153,7 @@ IF ( IRESP /= 0 .OR. IDYRATIO == 0 ) THEN RETURN END IF ! -YRECFM='XOR' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',NXOR_ALL(1),IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'XOR',NXOR_ALL(1),IRESP) IF ( IRESP /= 0 ) THEN WRITE (ILUOUT0,*) '********************************************************' WRITE (ILUOUT0,*) 'position XOR not present in fmfile; no nesting allowed' @@ -163,8 +162,7 @@ IF ( IRESP /= 0 ) THEN RETURN END IF ! -YRECFM='YOR' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',NYOR_ALL(1),IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'YOR',NYOR_ALL(1),IRESP) IF ( IRESP /= 0 ) THEN WRITE (ILUOUT0,*) '********************************************************' WRITE (ILUOUT0,*) 'resolution YOR not present in fmfile; no nesting allowed' @@ -173,15 +171,11 @@ IF ( IRESP /= 0 ) THEN RETURN END IF ! -YRECFM='IMAX' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='JMAX' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'IMAX',IIMAX) +CALL IO_READ_FIELD(TZFMFILE,'JMAX',IJMAX) ! ALLOCATE(ZZS(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT)) -YRECFM='ZS' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZZS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'ZS',ZZS) ! !* 2. Allocate coarse arrays ! ---------------------- @@ -247,8 +241,7 @@ END IF ! IF (LSLEVE) THEN ! - YRECFM='ZSMT' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZZS,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFMFILE,'ZSMT',ZZS) ! !* 5. Average the smooth orographies ! ------------------------------ diff --git a/src/MNH/compare_dad.f90 b/src/MNH/compare_dad.f90 index 0eff596a5..675afaa56 100644 --- a/src/MNH/compare_dad.f90 +++ b/src/MNH/compare_dad.f90 @@ -69,21 +69,24 @@ END MODULE MODI_COMPARE_DAD ! ------------ ! ! +USE MODD_CONF +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_LUNIT_n +USE MODD_PARAMETERS, ONLY: JPHEXT,JPVEXT,NMNHNAMELGTMAX +! USE MODE_FM USE MODE_FMREAD USE MODE_GRIDPROJ -USE MODD_LUNIT_n -USE MODD_CONF -USE MODD_PARAMETERS, ONLY: JPHEXT,JPVEXT,NMNHNAMELGTMAX +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST ! ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -CHARACTER (LEN=*), INTENT(IN) :: HDADINIFILE ! Name of true DAD FM file -CHARACTER (LEN=*), INTENT(IN) :: HDADSPAFILE ! Name of Replaced DAD FM file -INTEGER, INTENT(OUT) :: KRESP ! logical switch +CHARACTER (LEN=*), INTENT(IN) :: HDADINIFILE ! Name of true DAD FM file +CHARACTER (LEN=*), INTENT(IN) :: HDADSPAFILE ! Name of Replaced DAD FM file +INTEGER, INTENT(OUT) :: KRESP ! ! !* 0.2 Declarations of local variables : @@ -91,30 +94,25 @@ INTEGER, INTENT(OUT) :: KRESP ! logical switch ! INTEGER :: IRESP ! Return codes in FM routines INTEGER :: ILUOUT ! Logical unit number for the output listing -INTEGER :: ININAR ! Number of articles present in the LFIFM file INTEGER :: IMASDEV ! INTEGER :: IIU_1,IIU_2 ! Upper dimension in x direction INTEGER :: IJU_1,IJU_2 ! Upper dimension in y direction INTEGER :: IKU_1,IKU_2 ! Upper dimension in z direction ! -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM -INTEGER :: ILENCH, IGRID -CHARACTER (LEN=100):: YCOMMENT -CHARACTER(LEN=2) :: YDIR ! Type of the data field in LFIFM file -! REAL :: ZLON0_1,ZLAT0_1,ZBETA_1,ZRPK_1,ZLONORI_1,ZLATORI_1 REAL :: ZLON0_2,ZLAT0_2,ZBETA_2,ZRPK_2,ZLONORI_2,ZLATORI_2 -REAL, DIMENSION(:),ALLOCATABLE :: ZXHAT_1,ZYHAT_1,XZHAT_1 ! Position x,y,height -REAL, DIMENSION(:),ALLOCATABLE :: ZXHAT_2,ZYHAT_2,XZHAT_2 ! Position x,y,height +REAL, DIMENSION(:),ALLOCATABLE :: ZXHAT_1,ZYHAT_1,ZZHAT_1 ! Position x,y,height +REAL, DIMENSION(:),ALLOCATABLE :: ZXHAT_2,ZYHAT_2,ZZHAT_2 ! Position x,y,height REAL, DIMENSION(:,:),ALLOCATABLE :: ZZS_1 ! orography REAL, DIMENSION(:,:),ALLOCATABLE :: ZZS_2 ! orography ! INTEGER :: IIMAX_1,IJMAX_1,IKMAX_1 INTEGER :: IIMAX_2,IJMAX_2,IKMAX_2 ! -!------------------------------------------------------------------------------- REAL :: ZLATORI, ZLONORI, ZXHATM, ZYHATM +TYPE(TFILEDATA),POINTER :: TZDADINIFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZDADSPAFILE => NULL() !------------------------------------------------------------------------------- ! !* 1. INITIALIZATIONS @@ -141,64 +139,40 @@ ZLATORI_2=0. !* 2. Read DAD of initial file ! ------------------------ ! -CALL FMOPEN_ll(HDADINIFILE,'READ',CLUOUT,0,2,NVERB,ININAR,IRESP) -! -YRECFM='IMAX' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',IIMAX_1,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='JMAX' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',IJMAX_1,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_FILE_ADD2LIST(TZDADINIFILE,TRIM(HDADINIFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) +CALL IO_FILE_OPEN_ll(TZDADINIFILE,CLUOUT,IRESP) ! -YRECFM='KMAX' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',IKMAX_1,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZDADINIFILE,'IMAX',IIMAX_1) +CALL IO_READ_FIELD(TZDADINIFILE,'JMAX',IJMAX_1) +CALL IO_READ_FIELD(TZDADINIFILE,'KMAX',IKMAX_1) ! IIU_1=IIMAX_1 + 2 * JPHEXT IJU_1=IJMAX_1 + 2 * JPHEXT IKU_1=IKMAX_1 + 2 * JPVEXT ! ALLOCATE(ZXHAT_1(IIU_1)) -YRECFM='XHAT' -YDIR='XX' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZXHAT_1,IGRID,ILENCH,YCOMMENT,IRESP) -! ALLOCATE(ZYHAT_1(IJU_1)) -YRECFM='YHAT' -YDIR='YY' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZYHAT_1,IGRID,ILENCH,YCOMMENT,IRESP) -! -ALLOCATE(XZHAT_1(IKU_1)) -YRECFM='ZHAT' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',XZHAT_1,IGRID,ILENCH,YCOMMENT,IRESP) +ALLOCATE(ZZHAT_1(IKU_1)) +CALL IO_READ_FIELD(TZDADINIFILE,'XHAT',ZXHAT_1) +CALL IO_READ_FIELD(TZDADINIFILE,'YHAT',ZYHAT_1) +CALL IO_READ_FIELD(TZDADINIFILE,'ZHAT',ZZHAT_1) ! ALLOCATE(ZZS_1(IIU_1,IJU_1)) -YRECFM='ZS' -YDIR='XY' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,YDIR,ZZS_1,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LON0' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZLON0_1,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LAT0' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZLAT0_1,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZDADINIFILE,'ZS',ZZS_1) ! -YRECFM='BETA' -CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZBETA_1,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZDADINIFILE,'LON0',ZLON0_1) +CALL IO_READ_FIELD(TZDADINIFILE,'LAT0',ZLAT0_1) +CALL IO_READ_FIELD(TZDADINIFILE,'BETA',ZBETA_1) ! IF (.NOT.LCARTESIAN) THEN - YRECFM='RPK' - CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZRPK_1,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LATORI' - CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZLATORI_1,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM='LONORI' - CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',ZLONORI_1,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='MASDEV' - CALL FMREAD(HDADINIFILE,YRECFM,CLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZDADINIFILE,'RPK',ZRPK_1) + CALL IO_READ_FIELD(TZDADINIFILE,'LATORI',ZLATORI_1) + CALL IO_READ_FIELD(TZDADINIFILE,'LONORI',ZLONORI_1) + CALL IO_READ_FIELD(TZDADINIFILE,'MASDEV',IMASDEV) ! IF (IMASDEV<=45) THEN - CALL FMREAD(HDADINIFILE,'LATOR',CLUOUT,'--',ZLATORI_1,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HDADINIFILE,'LONOR',CLUOUT,'--',ZLONORI_1,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZDADINIFILE,'LATOR',ZLATORI_1) + CALL IO_READ_FIELD(TZDADINIFILE,'LONOR',ZLONORI_1) ZXHATM = - 0.5 * (ZXHAT_1(1)+ZXHAT_1(2)) ZYHATM = - 0.5 * (ZYHAT_1(1)+ZYHAT_1(2)) CALL SM_LATLON(ZLATORI_1,ZLONORI_1,ZXHATM,ZYHATM,ZLATORI,ZLONORI) @@ -207,74 +181,47 @@ IF (.NOT.LCARTESIAN) THEN END IF ENDIF ! -CALL FMCLOS_ll(HDADINIFILE,'KEEP',CLUOUT,IRESP) +CALL IO_FILE_CLOSE_ll(TZDADINIFILE,CLUOUT,IRESP) ! !------------------------------------------------------------------------------- ! !* 3. Read DAD of spawning file ! ------------------------ ! -CALL FMOPEN_ll(HDADSPAFILE,'READ',CLUOUT,0,2,NVERB,ININAR,IRESP) -! -YRECFM='IMAX' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',IIMAX_2,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_FILE_ADD2LIST(TZDADSPAFILE,TRIM(HDADSPAFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) +CALL IO_FILE_OPEN_ll(TZDADSPAFILE,CLUOUT,IRESP) ! -YRECFM='JMAX' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',IJMAX_2,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='KMAX' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',IKMAX_2,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZDADSPAFILE,'IMAX',IIMAX_2) +CALL IO_READ_FIELD(TZDADSPAFILE,'JMAX',IJMAX_2) +CALL IO_READ_FIELD(TZDADSPAFILE,'KMAX',IKMAX_2) ! IIU_2=IIMAX_2 + 2 * JPHEXT IJU_2=IJMAX_2 + 2 * JPHEXT IKU_2=IKMAX_2 + 2 * JPVEXT ! ALLOCATE(ZXHAT_2(IIU_2)) -YRECFM='XHAT' -YDIR='XX' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZXHAT_2,IGRID,ILENCH,YCOMMENT,IRESP) -! ALLOCATE(ZYHAT_2(IJU_2)) -YRECFM='YHAT' -YDIR='YY' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZYHAT_2,IGRID,ILENCH,YCOMMENT,IRESP) -! -ALLOCATE(XZHAT_2(IKU_2)) -YRECFM='ZHAT' -YDIR='--' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',XZHAT_2,IGRID,ILENCH,YCOMMENT,IRESP) +ALLOCATE(ZZHAT_2(IKU_2)) +CALL IO_READ_FIELD(TZDADSPAFILE,'XHAT',ZXHAT_2) +CALL IO_READ_FIELD(TZDADSPAFILE,'YHAT',ZYHAT_2) +CALL IO_READ_FIELD(TZDADSPAFILE,'ZHAT',ZZHAT_2) ! ALLOCATE(ZZS_2(IIU_2,IJU_2)) -YRECFM='ZS' -YDIR='XY' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,YDIR,ZZS_2,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LON0' -YDIR='--' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZLON0_2,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZDADSPAFILE,'ZS',ZZS_2) ! -YRECFM='LAT0' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZLAT0_2,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BETA' -CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZBETA_2,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZDADSPAFILE,'LON0',ZLON0_2) +CALL IO_READ_FIELD(TZDADSPAFILE,'LAT0',ZLAT0_2) +CALL IO_READ_FIELD(TZDADSPAFILE,'BETA',ZBETA_2) ! IF (.NOT.LCARTESIAN) THEN - YRECFM='RPK' - CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZRPK_2,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LATORI' - CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZLATORI_2,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LONORI' - CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',ZLONORI_2,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='MASDEV' - CALL FMREAD(HDADSPAFILE,YRECFM,CLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZDADSPAFILE,'RPK',ZRPK_2) + CALL IO_READ_FIELD(TZDADSPAFILE,'LATORI',ZLATORI_2) + CALL IO_READ_FIELD(TZDADSPAFILE,'LONORI',ZLONORI_2) + CALL IO_READ_FIELD(TZDADSPAFILE,'MASDEV',IMASDEV) ! IF (IMASDEV<=45) THEN - CALL FMREAD(HDADSPAFILE,'LATOR',CLUOUT,'--',ZLATORI_2,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HDADSPAFILE,'LONOR',CLUOUT,'--',ZLONORI_2,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZDADSPAFILE,'LATOR',ZLATORI_2) + CALL IO_READ_FIELD(TZDADSPAFILE,'LONOR',ZLONORI_2) ZXHATM = - 0.5 * (ZXHAT_2(1)+ZXHAT_2(2)) ZYHATM = - 0.5 * (ZYHAT_2(1)+ZYHAT_2(2)) CALL SM_LATLON(ZLATORI_2,ZLONORI_2,ZXHATM,ZYHATM,ZLATORI,ZLONORI) @@ -283,7 +230,7 @@ IF (.NOT.LCARTESIAN) THEN END IF ENDIF ! -CALL FMCLOS_ll(HDADSPAFILE,'KEEP',CLUOUT,IRESP) +CALL IO_FILE_CLOSE_ll(TZDADSPAFILE,CLUOUT,IRESP) ! !------------------------------------------------------------------------------- ! @@ -334,7 +281,7 @@ ENDIF ! ! 4.4 compare height ! -IF ( MINVAL(ABS(XZHAT_1(:)-XZHAT_2(:))) /= 0. ) KRESP=-1 +IF ( MINVAL(ABS(ZZHAT_1(:)-ZZHAT_2(:))) /= 0. ) KRESP=-1 IF (KRESP == -1 ) THEN WRITE(ILUOUT,FMT=1) 'vertical grids',TRIM(HDADINIFILE),TRIM(HDADSPAFILE) diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index 14a91d660..018de6791 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -220,11 +220,7 @@ INTEGER :: IRIMXU,IRIMYV ! Total size of the LB area (for the RIM di INTEGER :: JSV,JRR ! Loop index for MOIST AND ! additional scalar variables INTEGER :: IRR ! counter for moist variables -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER (LEN=2) :: YDIR -CHARACTER (LEN=4) :: YDIRLB +INTEGER :: IRESP INTEGER :: ILUOUT ! Logical unit number associated with HLUOUT 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 @@ -511,342 +507,141 @@ IF (KSV > 0) THEN END IF END IF ! User scalar variables -DO JSV = 1, NSV_USER - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - WRITE(YRECFM,'(A6,I3.3)')'LBXSVM',JSV - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialze PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - WRITE(YRECFM,'(A6,I3.3)')'LBYSVM',JSV - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialze PLBYSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! C2R2 scalar variables -DO JSV = NSV_C2R2BEG, NSV_C2R2END - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM='LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize C2R2 PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM='LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize C2R2 PLBYSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! C1R3 scalar variables -DO JSV = NSV_C1R3BEG, NSV_C1R3END - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM='LBX_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize C1R3 PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM='LBY_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize C1R3 PLBYSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! -! LIMA: CCN and IFN scalar variables -! -IF (CCLOUD=='LIMA' ) THEN - DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 +IF (NSV_USER>0) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1, NSV_USER SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = 'kg-1' - TZFIELD%CDIR = 'XY' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - ! - 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) - TZFIELD%CLBTYPE = 'LBX' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV - CALL IO_READ_FIELD_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 - WRITE(ILUOUT,*) 'Pb to initialize CCN PLBXSVM ' + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBXSVM',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialze PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF END IF END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) - TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) - TZFIELD%CLBTYPE = 'LBY' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV - CALL IO_READ_FIELD_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 - WRITE(ILUOUT,*) 'Pb to initialize CCN PLBYSVM ' + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBYSVM',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialze PLBYSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF END IF END IF - END IF - CASE('INIT') - IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. - IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. + CASE('INIT') + IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. + IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. END SELECT END DO - DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 +END IF +! C2R2 scalar variables +IF (NSV_C2R2END>=NSV_C2R2BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C2R2BEG, NSV_C2R2END SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = 'kg-1' - TZFIELD%CDIR = 'XY' - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 - ! - 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) - TZFIELD%CLBTYPE = 'LBX' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV - CALL IO_READ_FIELD_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 - WRITE(ILUOUT,*) 'Pb to initialize IFN' + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize C2R2 PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF END IF END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) - TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) - TZFIELD%CLBTYPE = 'LBY' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV - CALL IO_READ_FIELD_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 - WRITE(ILUOUT,*) 'Pb to initialize IFN' + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize C2R2 PLBYSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF END IF END IF - END IF - CASE('INIT') - IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. - IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. + CASE('INIT') + IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. + IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. END SELECT END DO -ENDIF -! ELEC scalar variables -DO JSV = NSV_ELECBEG, NSV_ELECEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM='LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize ELEC PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM='LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize ELEC PLBYSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! Chemical gas phase scalar variables -IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN +END IF +! C1R3 scalar variables +IF (NSV_C1R3END>=NSV_C1R3BEG) THEN TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = 'kg-1' + TZFIELD%CUNITS = 'm-3' TZFIELD%CDIR = 'XY' TZFIELD%NGRID = 1 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 ! - DO JSV = NSV_CHGSBEG, NSV_CHGSEND + DO JSV = NSV_C1R3BEG, NSV_C1R3END SELECT CASE(HGETSVM(JSV)) CASE ('READ') IF ( KSIZELBXSV_ll /= 0 ) THEN - TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) TZFIELD%CLBTYPE = 'LBX' WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV @@ -855,9 +650,9 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBXSVMM)) THEN PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Chemical PLBXSVM will be initialized to 0' + WRITE(ILUOUT,*) 'C1R3 PLBXSVM will be initialized to 0' ELSE - WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBXSVM ' + WRITE(ILUOUT,*) 'Pb to initialize C1R3 PLBXSVM ' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT @@ -868,7 +663,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN END IF ! IF (KSIZELBYSV_ll /= 0 ) THEN - TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) TZFIELD%CLBTYPE = 'LBY' WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV @@ -877,9 +672,9 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBYSVMM)) THEN PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Chemical PLBYSVM will be initialized to 0' + WRITE(ILUOUT,*) 'C1R3 PLBYSVM will be initialized to 0' ELSE - WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBYSVM ' + WRITE(ILUOUT,*) 'Pb to initialize C1R3 PLBYSVM ' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT @@ -894,208 +689,136 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN END SELECT END DO END IF -! Chemical aqueous phase scalar variables -DO JSV = NSV_CHACBEG, NSV_CHACEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize aqueous phase chemical PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF ! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize aqueous phase chemical PLBYSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! Chemical ice phase scalar variables -DO JSV = NSV_CHICBEG, NSV_CHICEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize ice phase chemical PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF +! LIMA: CCN and IFN scalar variables ! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Ice phase chemical PLBYSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! Orilam aerosol scalar variables -DO JSV = NSV_AERBEG, NSV_AEREND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBXSVM ' +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 = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize CCN PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBYSVM ' + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize CCN PLBYSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! Orilam aerosols moist scalar variables -DO JSV = NSV_AERDEPBEG, NSV_AERDEPEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBXSVM ' + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize IFN' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBYSVM ' + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize IFN' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! Dust scalar variables -IF (NSV_DSTEND>=NSV_DSTBEG) THEN + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'XY' @@ -1103,11 +826,11 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 ! - DO JSV = NSV_DSTBEG, NSV_DSTEND + DO JSV = NSV_ELECBEG, NSV_ELECEND SELECT CASE(HGETSVM(JSV)) CASE ('READ') IF ( KSIZELBXSV_ll /= 0 ) THEN - TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) TZFIELD%CLBTYPE = 'LBX' WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV @@ -1116,9 +839,9 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBXSVMM)) THEN PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Dust PLBXSVM will be initialized to 0' + WRITE(ILUOUT,*) 'ELEC PLBXSVM will be initialized to 0' ELSE - WRITE(ILUOUT,*) 'Pb to initialize dust PLBXSVM ' + WRITE(ILUOUT,*) 'Pb to initialize ELEC PLBXSVM ' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT @@ -1129,18 +852,17 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN END IF ! IF (KSIZELBYSV_ll /= 0 ) THEN - TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) TZFIELD%CLBTYPE = 'LBY' - WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV CALL IO_READ_FIELD_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' + WRITE(ILUOUT,*) 'ELEC PLBYSVM will be initialized to 0' ELSE - WRITE(ILUOUT,*) 'Pb to initialize dust PLBYSVM ' + WRITE(ILUOUT,*) 'Pb to initialize ELEC PLBYSVM ' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT @@ -1155,342 +877,785 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN END SELECT END DO END IF -! -DO JSV = NSV_DSTDEPBEG, NSV_DSTDEPEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize dust PLBXSVM ' -!callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF - END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - 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 -! Sea salt scalar variables -DO JSV = NSV_SLTBEG, NSV_SLTEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize sea salt PLBXSVM ' +! Chemical gas phase scalar variables +IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize aqueous phase chemical PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize aqueous phase chemical PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize ice phase chemical PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Ice phase chemical PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Aerosol PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize dust PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize dust PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize sea salt PLBYSVM ' +IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize dust PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF 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 + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize sea salt PLBXSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF + END IF + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize sea salt PLBYSVM ' +!callabortstop + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + 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 -DO JSV = NSV_PPBEG, NSV_PPEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_PP' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 +IF (NSV_PPEND>=NSV_PPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_PPBEG, NSV_PPEND + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_PP' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_PP' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_PP' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 - 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 + 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 -DO JSV = NSV_FFBEG, NSV_FFEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_FF' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 +IF (NSV_FFEND>=NSV_FFBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_FFBEG, NSV_FFEND + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_FF' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_FF' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_FF' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 - 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 + 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 -DO JSV = NSV_CSBEG, NSV_CSEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_CS' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 +IF (NSV_CSEND>=NSV_CSBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CSBEG, NSV_CSEND + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_CS' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_CS' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_CS' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 - 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 + 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 -DO JSV = NSV_LNOXBEG, NSV_LNOXEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_LINOX' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Linox PLBXSVM ' +IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_LNOXBEG, NSV_LNOXEND + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_LINOX' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Linox PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_LINOX' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize Linox PLBYSVM ' + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_LINOX' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize Linox PLBYSVM ' !calla bortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF 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 + 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 -DO JSV = NSV_LGBEG, NSV_LGEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize lagrangian PLBXSVM ' +IF (NSV_LGEND>=NSV_LGBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + 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 = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize lagrangian PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,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 - WRITE(ILUOUT,*) 'Pb to initialize lagrangian PLBYSVM ' + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_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 + WRITE(ILUOUT,*) 'Pb to initialize lagrangian PLBYSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF 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 + ! + 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 diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90 index 23eb1db97..fb462dc66 100644 --- a/src/MNH/ini_prog_var.f90 +++ b/src/MNH/ini_prog_var.f90 @@ -13,10 +13,10 @@ INTERFACE SUBROUTINE INI_PROG_VAR(HLUOUT,PTKE_MX,PSV_MX,HCHEMFILE) ! -CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Name of the output-listing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE_MX -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSV_MX -CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HCHEMFILE ! Name of the chem file +CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Name of the output-listing +REAL,DIMENSION(:,:,:), INTENT(IN) :: PTKE_MX +REAL,DIMENSION(:,:,:,:),INTENT(IN) :: PSV_MX +CHARACTER(LEN=*), INTENT(IN),OPTIONAL :: HCHEMFILE ! Name of the chem file END SUBROUTINE INI_PROG_VAR END INTERFACE END MODULE MODI_INI_PROG_VAR @@ -104,6 +104,7 @@ END MODULE MODI_INI_PROG_VAR USE MODD_CONF ! declaration modules USE MODD_CONF_n USE MODD_DYN_n +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_TURB_n USE MODD_PARAM_n USE MODD_LUNIT @@ -125,8 +126,10 @@ USE MODI_CH_INIT_SCHEME_n USE MODI_CH_AER_INIT_SOA ! USE MODE_POS +USE MODE_FIELD, ONLY : TFIELDDATA,TYPEREAL USE MODE_FM USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_FMREAD USE MODD_DIM_n ! @@ -134,19 +137,16 @@ IMPLICIT NONE ! !* 0.1 declaration of arguments ! -CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Name of the output-listing -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE_MX -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSV_MX -CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HCHEMFILE ! Name of the chem file +CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Name of the output-listing +REAL,DIMENSION(:,:,:), INTENT(IN) :: PTKE_MX +REAL,DIMENSION(:,:,:,:),INTENT(IN) :: PSV_MX +CHARACTER(LEN=*), INTENT(IN),OPTIONAL :: HCHEMFILE ! Name of the chem file ! !* 0.2 declaration of local variables ! INTEGER :: ILUOUT ! Logical unit number ! associated with HLUOUT -INTEGER :: IGRID,ILENCH,IRESP,ININAR ! File -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER(LEN=2) :: YDIR +INTEGER :: IRESP CHARACTER(LEN=32) :: YDESFM ! INTEGER :: IIMAX,IJMAX,IKMAX ! Dimensions of the chem file @@ -160,6 +160,8 @@ INTEGER :: JSV ! Loop index INTEGER :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX ! dust modes INTEGER :: ILUDES ! logical unit numbers of DESFM file LOGICAL :: GFOUND ! Return code when searching namelist +TYPE(TFIELDDATA) :: TZFIELD +TYPE(TFILEDATA),POINTER :: TZCHEMFILE => NULL() !------------------------------------------------------------------------------- ! CALL GET_MODEL_NUMBER_ll(IMI) @@ -226,38 +228,33 @@ IF(PRESENT(HCHEMFILE)) THEN CALL INI_NSV(1) ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ! Read dimensions in chem file and checks with output file - CALL FMOPEN_ll(HCHEMFILE,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP) - YRECFM='IMAX' - YDIR='--' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,IIMAX,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_FILE_ADD2LIST(TZCHEMFILE,TRIM(HCHEMFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TZCHEMFILE,HLUOUT,IRESP) + ! + CALL IO_READ_FIELD(TZCHEMFILE,'IMAX',IIMAX,IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) 'IMAX',' NOT FOUND IN THE CHEM FILE ',HCHEMFILE !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP END IF !IRESP - YRECFM='JMAX' - YDIR='--' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,IJMAX,IGRID,ILENCH, & - YCOMMENT,IRESP) + ! + CALL IO_READ_FIELD(TZCHEMFILE,'JMAX',IJMAX,IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) 'JMAX','NOT FOUND IN THE CHEM FILE ',HCHEMFILE !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP END IF !IRESP - YRECFM='KMAX' - YDIR='--' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,IKMAX,IGRID,ILENCH, & - YCOMMENT,IRESP) + ! + CALL IO_READ_FIELD(TZCHEMFILE,'KMAX',IKMAX,IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) 'KMAX','NOT FOUND IN THE CHEM FILE ',HCHEMFILE !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT @@ -265,7 +262,7 @@ IF(PRESENT(HCHEMFILE)) THEN END IF !IRESP IF ( (IIMAX/=(IIU_ll-2*JPHEXT)) .OR. (IJMAX/=(IJU_ll-2*JPHEXT)) & .OR. (IKMAX/=(IKU-2*JPVEXT)) ) THEN - WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,FMT=9000) WRITE(ILUOUT,*) 'THE GRIDS ARE DIFFERENT IN THE OUTPUT FILE :' WRITE(ILUOUT,*) IIU_ll-2*JPHEXT,'*',IJU_ll-2*JPHEXT,'*',IKU-2*JPVEXT WRITE(ILUOUT,*) 'AND IN THE CHEM FILE :',HCHEMFILE @@ -276,14 +273,21 @@ IF(PRESENT(HCHEMFILE)) THEN STOP END IF ! IIMAX IF (.NOT.LDUST) THEN - ! Read scalars in chem file + ! Read scalars in chem file + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! DO JSV = NSV_CHEMBEG,NSV_CHEMEND - YRECFM=TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)' + CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE XSVT(:,:,:,JSV) = 0. END IF !IRESP END DO ! JSV @@ -294,6 +298,13 @@ IF(PRESENT(HCHEMFILE)) THEN END IF IF (LDUST) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! LDSTINIT=.TRUE. LDSTPRES=.FALSE. YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' @@ -309,13 +320,13 @@ IF(PRESENT(HCHEMFILE)) THEN JSV = (JMODE-1)*IMOMENTS & !Number of moments previously counted + 1 & !Number of moments in this mode + (NSV_DSTBEG -1) !Previous list of tracers - YRECFM = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP @@ -328,13 +339,13 @@ IF(PRESENT(HCHEMFILE)) THEN JSV = (JMODE-1)*IMOMENTS & !Number of moments previously counted + JMOM & !Number of moments in this mode + (NSV_DSTBEG -1) !Previous list of tracers - YRECFM = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE STOP END IF !IRESP END DO ! JMOM @@ -343,6 +354,13 @@ IF(PRESENT(HCHEMFILE)) THEN END IF ! LDUST IF (LSALT) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! LSLTINIT=.TRUE. LSLTPRES=.FALSE. CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT) @@ -356,13 +374,13 @@ IF(PRESENT(HCHEMFILE)) THEN JSV = (JMODE-1)*IMOMENTS & !Number of moments previously counted + 1 & !Number of moments in this mode + (NSV_SLTBEG -1) !Previous list of tracers - YRECFM = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP @@ -375,36 +393,46 @@ IF(PRESENT(HCHEMFILE)) THEN JSV = (JMODE-1)*IMOMENTS & !Number of moments previously counted + JMOM & !Number of moments in this mode + (NSV_SLTBEG -1) !Previous list of tracers - YRECFM = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP) IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE STOP END IF !IRESP END DO ! JMOM END DO !JMOD END IF !if IMOMENTS END IF ! LSALT - - DO JSV = NSV_AERBEG,NSV_AEREND - YRECFM=TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T' - YDIR='XY' - CALL FMREAD(HCHEMFILE,YRECFM,HLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, & - YCOMMENT,IRESP) - IF (IRESP/=0) THEN - WRITE(ILUOUT,FMT=9000) - WRITE(ILUOUT,*) TRIM(YRECFM),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE + ! + IF (NSV_AEREND>=NSV_AERBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_AERBEG,NSV_AEREND + TZFIELD%CMNHNAME = TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP) + IF (IRESP/=0) THEN + WRITE(ILUOUT,FMT=9000) + WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE !callabortstop !CALL ABORT ! STOP - LORILAM=.FALSE. - END IF !IRESP - END DO ! JSV - CALL FMCLOS_ll(HCHEMFILE,'KEEP',HLUOUT,IRESP) - + LORILAM=.FALSE. + END IF !IRESP + END DO ! JSV + END IF + ! + CALL IO_FILE_CLOSE_ll(TZCHEMFILE,HLUOUT,IRESP) + ! ELSE ! HCHEMFILE IF (NSV >=1) THEN ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) diff --git a/src/MNH/init_for_convlfi.f90 b/src/MNH/init_for_convlfi.f90 index 155893be6..9e748d4cc 100644 --- a/src/MNH/init_for_convlfi.f90 +++ b/src/MNH/init_for_convlfi.f90 @@ -14,9 +14,11 @@ MODULE MODI_INIT_FOR_CONVLFI ! ! INTERFACE - SUBROUTINE INIT_FOR_CONVLFI(HINIFILE,HLUOUT) + SUBROUTINE INIT_FOR_CONVLFI(TPINIFILE,HLUOUT) ! -CHARACTER(LEN=28), INTENT(IN) :: HINIFILE ! file being read +USE MODD_IO_ll,ONLY: TFILEDATA +! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! file being read CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output listing ! END SUBROUTINE INIT_FOR_CONVLFI @@ -24,7 +26,7 @@ END INTERFACE END MODULE MODI_INIT_FOR_CONVLFI ! ! ############################################ - SUBROUTINE INIT_FOR_CONVLFI(HINIFILE,HLUOUT) + SUBROUTINE INIT_FOR_CONVLFI(TPINIFILE,HLUOUT) ! ############################################ ! !!**** *INIT_FOR_CONVLFI * - light monitor to initialize the variables @@ -69,6 +71,7 @@ END MODULE MODI_INIT_FOR_CONVLFI !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_ll,ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_CONF USE MODD_CST @@ -100,18 +103,13 @@ IMPLICIT NONE ! !* 0.1 Arguments variables ! -CHARACTER(LEN=28), INTENT(IN) :: HINIFILE ! file being read +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! file being read CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output listing ! !* 0.2 Local variables ! -INTEGER :: IGRID,ILENCH,IRESP,ILUOUT ! return code of file management -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER (LEN=2) :: YDIR ! -INTEGER, DIMENSION(3) :: ITDATE ! date array +INTEGER :: IRESP CHARACTER (LEN=40) :: YTITLE ! Title for date print -REAL, DIMENSION(:,:), ALLOCATABLE :: ZCOEF REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! Jacobian ! REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! Position x in the conformal @@ -133,47 +131,32 @@ INTEGER :: IMASDEV ! masdev of the file ! !* 1.1 Read the geometry kind in the LFIFM file (Cartesian or spherical) ! -YRECFM = 'CARTESIAN' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'CARTESIAN',LCARTESIAN) ! !* 1.2 Read configuration and dimensions in initial file and initialize ! subdomain dimensions and parallel variables ! -YRECFM='IMAX' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='JMAX' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'IMAX',NIMAX_ll) +CALL IO_READ_FIELD(TPINIFILE,'JMAX',NJMAX_ll) ! -YRECFM = 'L1D' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,L1D,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D,IRESP) IF (IRESP/=0) THEN L1D=.FALSE. IF( (NIMAX_ll == 1).AND.(NJMAX_ll == 1) ) L1D=.TRUE. ENDIF ! -YRECFM = 'L2D' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,L2D,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D,IRESP) IF (IRESP/=0) THEN L2D=.FALSE. IF( (NIMAX_ll /= 1).AND.(NJMAX_ll == 1) ) L2D=.TRUE. ENDIF ! -YRECFM = 'PACK' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LPACK,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK,IRESP) IF (IRESP/=0) LPACK=.TRUE. ! CALL SET_FMPACK_ll(L1D,L2D,LPACK) ! -YRECFM='KMAX' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'KMAX',NKMAX) ! CSPLIT ='BSPLITTING' ; NHALO = 1 CALL SET_SPLITTING_ll(CSPLIT) @@ -206,48 +189,21 @@ CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX) ! ! 2.1 reading ! -YRECFM='LON0' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XLON0,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LAT0' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BETA' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XBETA,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='XHAT' -ALLOCATE(XXHAT(IIU)) -YDIR='XX' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XXHAT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='YHAT' -ALLOCATE(XYHAT(IJU)) -YDIR='YY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'LAT0',XLAT0) +CALL IO_READ_FIELD(TPINIFILE,'LON0',XLON0) +CALL IO_READ_FIELD(TPINIFILE,'BETA',XBETA) +CALL IO_READ_FIELD(TPINIFILE,'XHAT',XXHAT) +CALL IO_READ_FIELD(TPINIFILE,'YHAT',XYHAT) ! IF (.NOT.LCARTESIAN) THEN - YRECFM='MASDEV' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='RPK' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XRPK,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LONORI' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LATORI' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XLATORI,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'MASDEV',IMASDEV) + CALL IO_READ_FIELD(TPINIFILE,'RPK',XRPK) + CALL IO_READ_FIELD(TPINIFILE,'LONORI',XLONORI) + CALL IO_READ_FIELD(TPINIFILE,'LATORI',XLATORI) ! IF (IMASDEV<=45) THEN - CALL FMREAD(HINIFILE,'LONOR',HLUOUT,'--',XLONORI,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HINIFILE,'LATOR',HLUOUT,'--',XLATORI,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'LONOR',XLONORI) + CALL IO_READ_FIELD(TPINIFILE,'LATOR',XLATORI) ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT)) CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !// CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !// @@ -260,72 +216,29 @@ IF (.NOT.LCARTESIAN) THEN END IF END IF ! -YRECFM='ZS' ALLOCATE(XZS(IIU,IJU)) -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XZS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'ZS',XZS,IRESP) IF (IRESP/=0) XZS(:,:)=0. ! -YRECFM='ZSMT' ALLOCATE(XZSMT(IIU,IJU)) -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'ZSMT',XZSMT,IRESP) IF (IRESP/=0) XZSMT(:,:)=XZS(:,:) ! -YRECFM='ZHAT' ALLOCATE(XZHAT(IKU)) -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) ! -YRECFM='SLEVE' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'SLEVE',LSLEVE,IRESP) IF (IRESP/=0) LSLEVE = .FALSE. ! IF (LSLEVE) THEN - YRECFM='LEN1' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XLEN1,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM='LEN2' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XLEN2,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'LEN1',XLEN1) + CALL IO_READ_FIELD(TPINIFILE,'LEN2',XLEN2) END IF ! -YRECFM='DTEXP%TDATE' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) -TDTEXP%TDATE=DATE(ITDATE(1),ITDATE(2),ITDATE(3)) -! -YRECFM='DTEXP%TIME' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TDTEXP%TIME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DTMOD%TDATE' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) -TDTMOD%TDATE=DATE(ITDATE(1),ITDATE(2),ITDATE(3)) -! -YRECFM='DTMOD%TIME' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TDTMOD%TIME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DTSEG%TDATE' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) -TDTSEG%TDATE=DATE(ITDATE(1),ITDATE(2),ITDATE(3)) -! -YRECFM='DTSEG%TIME' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TDTSEG%TIME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DTCUR%TDATE' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) -TDTCUR%TDATE=DATE(ITDATE(1),ITDATE(2),ITDATE(3)) -! -YRECFM='DTCUR%TIME' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TDTCUR%TIME,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'DTEXP',TDTEXP) +CALL IO_READ_FIELD(TPINIFILE,'DTMOD',TDTMOD) +CALL IO_READ_FIELD(TPINIFILE,'DTSEG',TDTSEG) +CALL IO_READ_FIELD(TPINIFILE,'DTCUR',TDTCUR) ! YTITLE='CURRENT DATE AND TIME' CALL SM_PRINT_TIME(TDTCUR,HLUOUT,YTITLE) @@ -336,7 +249,6 @@ ALLOCATE(XDXHAT(IIU)) ALLOCATE(XDYHAT(IJU)) ALLOCATE(XZZ(IIU,IJU,IKU)) ALLOCATE(ZJ(IIU,IJU,IKU)) -ALLOCATE(ZCOEF(IIU,IJU)) ! CALL INI_CST ! @@ -355,10 +267,7 @@ END IF !* 3. INITIALIZE THE PROGNOSTIC AND SURFACE FIELDS (read_field) ! -------------------------------------------- ALLOCATE(XPABST(IIU,IJU,IKU)) -! -YDIR='XY' -YRECFM = 'PABST' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XPABST,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'PABST',XPABST) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90 index 2cb695388..dd808b5dd 100644 --- a/src/MNH/mnh2lpdm.f90 +++ b/src/MNH/mnh2lpdm.f90 @@ -25,6 +25,10 @@ USE MODD_MNH2LPDM USE MODI_IO_LL USE MODD_CONF, ONLY : CPROGRAM +USE MODD_IO_ll,ONLY : TPTR2FILE +! +USE MODE_FM +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST ! USE MODI_MNH2LPDM_INI USE MODI_MNH2LPDM_ECH @@ -38,6 +42,7 @@ CHARACTER(LEN=28) :: YFNML,YFLOG ! Nom NAMELIST et LOG. INTEGER :: IFNML,IFLOG ! Unite NAMELIST et LOG. INTEGER :: IFMTO,IFGRI,IFDAT ! Unite METEO et GRILLE. INTEGER :: IREP,IVERB,JFIC +TYPE(TPTR2FILE),DIMENSION(JPMNHMAX) :: TZFMNH ! MesoNH files ! ! ! @@ -51,9 +56,6 @@ YFLOG = 'METEO.log' YFNML = 'MNH2LPDM1.nam' IVERB = 5 CFMNH(:) = 'VIDE' -IFLOG = 52 -IFGRI = 51 -IFDAT = 53 ! ! !* 1.2 Initialisation routines LL. @@ -82,8 +84,10 @@ CALL CLOSE_LL(YFNML,IREP,'KEEP') ! IF (CFMNH(1).NE.'VIDE') THEN NBMNH=1 + CALL IO_FILE_ADD2LIST(TZFMNH(1)%TZFILE,TRIM(CFMNH(1)),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=IVERB) DO WHILE (CFMNH(NBMNH+1).NE.'VIDE') NBMNH=NBMNH+1 + CALL IO_FILE_ADD2LIST(TZFMNH(NBMNH)%TZFILE,TRIM(CFMNH(NBMNH)),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=IVERB) END DO print *,NBMNH,' fichiers a traiter.' ELSE @@ -106,17 +110,16 @@ CALL OPEN_LL(UNIT=IFDAT,FILE=CFDAT,IOSTAT=IREP,FORM='FORMATTED', & ! !* 2.2 Preparation du couplage. ! -CALL MNH2LPDM_INI(CFMNH(1),CFMNH(NBMNH),YFLOG,IFLOG,IFGRI,IFDAT,IVERB) +CALL MNH2LPDM_INI(TZFMNH(1)%TZFILE,TZFMNH(NBMNH)%TZFILE,YFLOG,IFLOG,IFGRI,IFDAT) ! ! !* 2.3 Traitement des echeances. ! DO JFIC=1,NBMNH - IFMTO = JFIC+60 print*,"CFMTO(JFIC)=",CFMTO(JFIC) CALL OPEN_LL(UNIT=IFMTO,FILE=CFMTO(JFIC),IOSTAT=IREP,FORM='UNFORMATTED', & ACTION='WRITE',MODE='GLOBAL',RECL=100000000) - CALL MNH2LPDM_ECH(CFMNH(JFIC),IFMTO,YFLOG,IFLOG,IVERB) + CALL MNH2LPDM_ECH(TZFMNH(JFIC)%TZFILE,IFMTO,YFLOG) print*,"CLOSE_LL(CFMTO(JFIC)" CALL CLOSE_LL(CFMTO(JFIC),IREP,'KEEP') END DO diff --git a/src/MNH/mnh2lpdm_ech.f90 b/src/MNH/mnh2lpdm_ech.f90 index 33fee06ae..fb4effaa6 100644 --- a/src/MNH/mnh2lpdm_ech.f90 +++ b/src/MNH/mnh2lpdm_ech.f90 @@ -3,7 +3,7 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ######spl - SUBROUTINE MNH2LPDM_ECH(HFM,KFMTO,HFLOG,KFLOG,KVERB) + SUBROUTINE MNH2LPDM_ECH(TPFILE,KFMTO,HFLOG) ! ################################################## !----------------------------------------------------------------------- !**** MNH2S2_ECH TRAITEMENT D'UNE ECHEANCE. @@ -20,6 +20,7 @@ ! ! USE MODD_DIM_n +USE MODD_IO_ll,ONLY : TFILEDATA USE MODD_TIME_n USE MODD_GRID_n ! @@ -29,6 +30,9 @@ USE MODD_TIME ! USE MODD_MNH2LPDM ! +USE MODE_FM +USE MODE_FMREAD +! USE MODI_IO_LL USE MODI_FM_LL USE MODI_FMREAD_LL @@ -39,22 +43,20 @@ IMPLICIT NONE ! !* 0.2 Arguments. ! -CHARACTER(LEN=*), INTENT(IN) :: HFM,HFLOG -INTEGER, INTENT(IN) :: KVERB,KFMTO -INTEGER, INTENT(IN) :: KFLOG +TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE +CHARACTER(LEN=*), INTENT(IN) :: HFLOG +INTEGER, INTENT(IN) :: KFMTO ! ! !* 0.3 Variables locales. ! -CHARACTER(LEN=100) :: YCOM ! Commentaire champ FM. CHARACTER(LEN=100) :: YFTURB ! Stockage champs de turbulence. INTEGER :: KFTURB -INTEGER :: IREP,INBART,IGRID,ILONCOM ! Variables lecture FM. -INTEGER,DIMENSION(3) :: IDATCUR ! Date dans FM. -REAL :: ZSECCUR ! Heure (sec) dans FM. +INTEGER :: IREP INTEGER :: ICURAA,ICURMM,ICURJJ ! Date courante. INTEGER :: ICURHH,ICURMN,ICURSS ! Heure courante. INTEGER :: JI,JJ,JK +TYPE(DATE_TIME) :: TZDTCUR ! ! ! @@ -70,17 +72,16 @@ INTEGER :: JI,JJ,JK ! !* 2.1 Ouverture du fichier Meso-NH. ! -CALL FMOPEN_LL(HFM,'READ',HFLOG,0,2,KVERB,INBART,IREP) +CALL IO_FILE_OPEN_ll(TPFILE,HFLOG,IREP) ! !* 2.2 Date et heure courante. ! -CALL FMREAD(HFM,'DTCUR%TDATE',HFLOG,'--',IDATCUR,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'DTCUR%TIME', HFLOG,'--',ZSECCUR,IGRID,ILONCOM,YCOM,IREP) +CALL IO_READ_FIELD(TPFILE,'DTCUR',TZDTCUR) ! -ICURAA=MOD(IDATCUR(1),100) ! Annee sur 2 caracteres. -ICURMM=IDATCUR(2) -ICURJJ=IDATCUR(3) -ICURSS=NINT(ZSECCUR) +ICURAA=MOD(TZDTCUR%TDATE%YEAR,100) ! Annee sur 2 caracteres. +ICURMM=TZDTCUR%TDATE%MONTH +ICURJJ=TZDTCUR%TDATE%DAY +ICURSS=NINT(TZDTCUR%TIME) ! ICURMN = NINT( (FLOAT(ICURSS)/60.0)/5.0 )*5 ! Heure arrondie a 5 minutes pres. ICURSS = 0 @@ -95,26 +96,28 @@ print 20300, ICURJJ,ICURMM,ICURAA,ICURHH,ICURMN,ICURSS ! !* 2.3 Lecture des champs Meso-NH de base. ! -CALL FMREAD(HFM,'UT',HFLOG,'XY',XUT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'VT',HFLOG,'XY',XVT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'WT',HFLOG,'XY',XWT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'THT',HFLOG,'XY',XTHT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'TKET',HFLOG,'XY',XTKET,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'LM',HFLOG,'XY',XLM,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'THW_FLX',HFLOG,'XY',XWPTHP,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'DISS',HFLOG,'XY',XDISSIP,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'FMU',HFLOG,'XY',XSFU,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'FMV',HFLOG,'XY',XSFV,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'INPRT',HFLOG,'XY',XINRT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'RVT',HFLOG,'XY',XRMVT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'RCT',HFLOG,'XY',XRMCT,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM,'RRT',HFLOG,'XY',XRMRT,IGRID,ILONCOM,YCOM,IREP) +CALL IO_READ_FIELD(TPFILE,'UT', XUT) +CALL IO_READ_FIELD(TPFILE,'VT', XVT) +CALL IO_READ_FIELD(TPFILE,'WT', XWT) +CALL IO_READ_FIELD(TPFILE,'THT', XTHT) +CALL IO_READ_FIELD(TPFILE,'TKET', XTKET) +!PW:TODO: where are these fields (LM,THW_FLX,DISS,FMU,FMV) written? +!Warning: not in fieldlist => won't be found +CALL IO_READ_FIELD(TPFILE,'LM', XLM) +CALL IO_READ_FIELD(TPFILE,'THW_FLX',XWPTHP) +CALL IO_READ_FIELD(TPFILE,'DISS', XDISSIP) +CALL IO_READ_FIELD(TPFILE,'FMU', XSFU) +CALL IO_READ_FIELD(TPFILE,'FMV', XSFV) +CALL IO_READ_FIELD(TPFILE,'INPRT', XINRT) +CALL IO_READ_FIELD(TPFILE,'RVT', XRMVT) +CALL IO_READ_FIELD(TPFILE,'RCT', XRMCT) +CALL IO_READ_FIELD(TPFILE,'RRT', XRMRT) ! ! Lecture des donnees Meso-NH terminee.' ! !* 2.4 Fermeture du fichier Meso-NH. ! -CALL FMCLOS_LL(HFM,'KEEP',HFLOG,IREP) +CALL IO_FILE_CLOSE_ll(TPFILE,HFLOG,IREP) ! ! !* 3. PREPARATION DES DONNEES. diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90 index d9784ea91..a55957ed6 100644 --- a/src/MNH/mnh2lpdm_ini.f90 +++ b/src/MNH/mnh2lpdm_ini.f90 @@ -3,7 +3,7 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ######spl - SUBROUTINE MNH2LPDM_INI(HFM1,HFM2,HFLOG,KFLOG,KFGRI,KFDAT,KVERB) + SUBROUTINE MNH2LPDM_INI(TPFILE1,TPFILE2,HFLOG,KFLOG,KFGRI,KFDAT) !-------------------------------------------------------------------------- !* MNH2S2_INI : INITIALISATION DU COUPLAGE MESO-NH / LPDM. ! @@ -18,7 +18,6 @@ ! KFLOG Unite logique du fichier-log. ! IFGRI Unite logique du fichier GRILLE. ! IFDAT Unite logique du fichier DATE -! KVERB Niveau de blabla. ! !-------------------------------------------------------------------------- ! @@ -41,9 +40,9 @@ USE MODD_TIME USE MODD_TIME_n ! USE MODE_FM +USE MODE_FMREAD USE MODE_GRIDPROJ USE MODE_IO_ll -USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST USE MODE_MODELN_HANDLER USE MODI_XYTOLATLON ! @@ -56,33 +55,30 @@ USE MODI_TEMPORAL_DIST ! IMPLICIT NONE ! -CHARACTER(LEN=*), INTENT(IN) :: HFM1,HFM2,HFLOG -INTEGER, INTENT(IN) :: KFLOG,KFGRI,KFDAT,KVERB +TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE1,TPFILE2 +CHARACTER(LEN=*), INTENT(IN) :: HFLOG +INTEGER, INTENT(IN) :: KFLOG,KFGRI,KFDAT ! ! !* 0.3 Variables locales. ! CHARACTER(LEN=28) :: YNAME,YDAD ! Noms du FM et de son papa. -CHARACTER(LEN=100) :: YCOM ! Commentaire MNH. CHARACTER(LEN=2) :: YSTORAGE ! Type de variable. ! -INTEGER, DIMENSION(3) :: IDATMDL,IDATCUR1,IDATCUR2 ! Date du modele, Date courante -REAL :: ZSECMDL,ZSECCUR1,ZSECCUR2 ! Heure du modele, Heure courante REAL :: ZECHEANCE1,ZECHEANCE2 ! dist temp date modele - date courante INTEGER :: IHHMDL,IMNMDL,ISSMDL ! h - mn - s du model INTEGER :: IHHCUR1,IMNCUR1,ISSCUR1 INTEGER :: IHHCUR2,IMNCUR2,ISSCUR2 CHARACTER(LEN=14) :: YDATMDL,YDATCUR1,YDATCUR2 ! -INTEGER :: INBART,IGRID,ILONCOM,IREP +INTEGER :: IREP REAL :: XLATOR,XLONOR,XPTLAT,XPTLON REAL :: XXPTSOMNH,XYPTSOMNH INTEGER :: JI,JJ,JK,a INTEGER :: b,c,I +INTEGER, DIMENSION(:), ALLOCATABLE :: TAB1D INTEGER, DIMENSION(:,:), ALLOCATABLE :: TAB2D -INTEGER, DIMENSION(:), ALLOCATABLE :: TAB1D -TYPE(TFILEDATA),POINTER :: TZFM1 => NULL() -TYPE(TFILEDATA),POINTER :: TZFM2 => NULL() +TYPE(DATE_TIME) :: TZDTCUR1,TZDTCUR2,TZDTEXP1 ! ! ! @@ -99,49 +95,44 @@ CALL GOTO_MODEL(1) ! !* 2.1 Ouverture du fichier Meso-NH. ! -CALL IO_FILE_ADD2LIST(TZFM1,TRIM(HFM1),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=KVERB) -CALL IO_FILE_ADD2LIST(TZFM2,TRIM(HFM2),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=KVERB) -CALL IO_FILE_OPEN_ll(TZFM1,HFLOG,IREP) -CALL IO_FILE_OPEN_ll(TZFM2,HFLOG,IREP) +CALL IO_FILE_OPEN_ll(TPFILE1,HFLOG,IREP) +CALL IO_FILE_OPEN_ll(TPFILE2,HFLOG,IREP) ! ! !* 2.2 Date et heure du modele. ! -CALL FMREAD(HFM1,'DTEXP%TDATE',HFLOG,'--',IDATMDL,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM1,'DTEXP%TIME', HFLOG,'--',ZSECMDL,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM1,'DTCUR%TDATE',HFLOG,'--',IDATCUR1,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM1,'DTCUR%TIME', HFLOG,'--',ZSECCUR1,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM2,'DTCUR%TDATE',HFLOG,'--',IDATCUR2,IGRID,ILONCOM,YCOM,IREP) -CALL FMREAD(HFM2,'DTCUR%TIME', HFLOG,'--',ZSECCUR2,IGRID,ILONCOM,YCOM,IREP) -! -CALL TEMPORAL_DIST(IDATCUR1(1),IDATCUR1(2),IDATCUR1(3), & - ZSECCUR1,IDATMDL(1),IDATMDL(2),IDATMDL(3), & - ZSECMDL,ZECHEANCE1) -CALL TEMPORAL_DIST(IDATCUR2(1),IDATCUR2(2),IDATCUR2(3), & - ZSECCUR2,IDATMDL(1),IDATMDL(2),IDATMDL(3), & - ZSECMDL,ZECHEANCE2) -! -IHHMDL=INT(ZSECMDL/3600) -IMNMDL=INT((ZSECMDL-IHHMDL*3600)/60) -ISSMDL=INT(ZSECMDL-IHHMDL*3600-IMNMDL*60) -IHHCUR1=INT(ZSECCUR1/3600) -IMNCUR1=INT((ZSECCUR1-IHHCUR1*3600)/60) -ISSCUR1=INT(ZSECCUR1-IHHCUR1*3600-IMNCUR1*60) -IHHCUR2=INT(ZSECCUR2/3600) -IMNCUR2=INT((ZSECCUR2-IHHCUR2*3600)/60) -ISSCUR2=INT(ZSECCUR2-IHHCUR2*3600-IMNCUR2*60) -! -WRITE(YDATMDL,'(I4.4,5I2.2)') IDATMDL(1), IDATMDL(2), IDATMDL(3), & +CALL IO_READ_FIELD(TPFILE1,'DTEXP',TZDTEXP1) +CALL IO_READ_FIELD(TPFILE1,'DTCUR',TZDTCUR1) +CALL IO_READ_FIELD(TPFILE2,'DTCUR',TZDTCUR2) +! +CALL TEMPORAL_DIST(TZDTCUR1%TDATE%YEAR,TZDTCUR1%TDATE%MONTH,TZDTCUR1%TDATE%DAY,TZDTCUR1%TIME, & + TZDTEXP1%TDATE%YEAR,TZDTEXP1%TDATE%MONTH,TZDTEXP1%TDATE%DAY,TZDTEXP1%TIME, & + ZECHEANCE1) +CALL TEMPORAL_DIST(TZDTCUR2%TDATE%YEAR,TZDTCUR2%TDATE%MONTH,TZDTCUR2%TDATE%DAY,TZDTCUR2%TIME, & + TZDTEXP1%TDATE%YEAR,TZDTEXP1%TDATE%MONTH,TZDTEXP1%TDATE%DAY,TZDTEXP1%TIME, & + ZECHEANCE2) +! +IHHMDL=INT(TZDTEXP1%TIME/3600) +IMNMDL=INT((TZDTEXP1%TIME-IHHMDL*3600)/60) +ISSMDL=INT(TZDTEXP1%TIME-IHHMDL*3600-IMNMDL*60) +IHHCUR1=INT(TZDTCUR1%TIME/3600) +IMNCUR1=INT((TZDTCUR1%TIME-IHHCUR1*3600)/60) +ISSCUR1=INT(TZDTCUR1%TIME-IHHCUR1*3600-IMNCUR1*60) +IHHCUR2=INT(TZDTCUR2%TIME/3600) +IMNCUR2=INT((TZDTCUR2%TIME-IHHCUR2*3600)/60) +ISSCUR2=INT(TZDTCUR2%TIME-IHHCUR2*3600-IMNCUR2*60) +! +WRITE(YDATMDL, '(I4.4,5I2.2)') TZDTEXP1%TDATE%YEAR, TZDTEXP1%TDATE%MONTH, TZDTEXP1%TDATE%DAY, & IHHMDL, IMNMDL, ISSMDL -WRITE(YDATCUR1,'(I4.4,5I2.2)') IDATCUR1(1), IDATCUR1(2), IDATCUR1(3), & +WRITE(YDATCUR1,'(I4.4,5I2.2)') TZDTCUR1%TDATE%YEAR, TZDTCUR1%TDATE%MONTH, TZDTCUR1%TDATE%DAY, & IHHCUR1, IMNCUR1, ISSCUR1 -WRITE(YDATCUR2,'(I4.4,5I2.2)') IDATCUR2(1), IDATCUR2(2), IDATCUR2(3), & +WRITE(YDATCUR2,'(I4.4,5I2.2)') TZDTCUR2%TDATE%YEAR, TZDTCUR2%TDATE%MONTH, TZDTCUR2%TDATE%DAY, & IHHCUR2, IMNCUR2, ISSCUR2 ! -NMDLAA=MOD( IDATMDL(1), 100 ) ! Annee arrondi a 2 chiffres. -NMDLMM=IDATMDL(2) -NMDLJJ=IDATMDL(3) -NMDLSS=NINT(ZSECMDL) +NMDLAA=MOD( TZDTEXP1%TDATE%YEAR, 100 ) ! Annee arrondi a 2 chiffres. +NMDLMM=TZDTEXP1%TDATE%MONTH +NMDLJJ=TZDTEXP1%TDATE%DAY +NMDLSS=NINT(TZDTEXP1%TIME) ! !* Heure du modele arrondie a 5 minutes pres. ! @@ -152,7 +143,7 @@ NMDLMN =NMDLMN-NMDLHH*60 ! !* 2.3 Grille horizontale. ! -CALL READ_HGRID(1,TZFM1,YNAME,YDAD,YSTORAGE) +CALL READ_HGRID(1,TPFILE1,YNAME,YDAD,YSTORAGE) IF (YNAME == YDAD) THEN IGRILLE=1 ELSE @@ -172,7 +163,7 @@ NJE=NJU-JPHEXT ! !* 2.4 Nombre de niveaux-verticaux. ! -CALL FMREAD(HFM1,'KMAX',HFLOG,'--',NKMAX,IGRID,ILONCOM,YCOM,IREP) +CALL IO_READ_FIELD(TPFILE1,'KMAX',NKMAX) !WRITE(KFLOG,*) '%%% MNH2S2_INI Lecture du nombre de niveau OK.' ! NKU = NKMAX+2*JPVEXT @@ -202,15 +193,16 @@ ALLOCATE( XSFV(NIU,NJU)) ! !* 2.6 Decoupage vertical. ! -CALL FMREAD(HFM1,'ZHAT',HFLOG,'--',XZHAT,IGRID,ILONCOM,YCOM,IREP) +CALL IO_READ_FIELD(TPFILE1,'ZHAT',XZHAT) ! !* 2.7 Orographie. ! -CALL FMREAD(HFM1,'ZS',HFLOG,'XY',XZS,IGRID,ILONCOM,YCOM,IREP) +CALL IO_READ_FIELD(TPFILE1,'ZS',XZS) ! !* 2.8 Rugosite Z0. ! -CALL FMREAD(HFM1,'Z0',HFLOG,'XY',XZ0,IGRID,ILONCOM,YCOM,IREP) +!PW:TODO: where is this field written? Warning: not in fieldlist => won't be found +CALL IO_READ_FIELD(TPFILE1,'Z0',XZ0) ! XXPTSOMNH=XXHAT(1)+(XXHAT(2)-XXHAT(1))/2 XYPTSOMNH=XYHAT(1)+(XYHAT(2)-XYHAT(1))/2 @@ -435,8 +427,8 @@ DEALLOCATE(XZHAT) ! ! Fermeture du fichier Meso-NH. ! -CALL IO_FILE_CLOSE_ll(TZFM1,HFLOG,IREP) -CALL IO_FILE_CLOSE_ll(TZFM2,HFLOG,IREP) +CALL IO_FILE_CLOSE_ll(TPFILE1,HFLOG,IREP) +CALL IO_FILE_CLOSE_ll(TPFILE2,HFLOG,IREP) ! ! !-------------------------------------------' diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index d0c81808c..d2bd7fa30 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -62,7 +62,7 @@ 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) :: 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 @@ -100,23 +100,23 @@ 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) :: 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 +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) :: 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 ! ! END SUBROUTINE READ_FIELD @@ -124,7 +124,8 @@ END SUBROUTINE READ_FIELD END INTERFACE ! END MODULE MODI_READ_FIELD -! ######spl +! +! ######################################################################## SUBROUTINE READ_FIELD(TPINIFILE,HLUOUT,KMASDEV,KIU,KJU,KKU,PTSTEP, & HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT, & HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR, & @@ -267,7 +268,7 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES USE MODD_SALT USE MODD_TIME ! for type DATE_TIME ! -USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEDATE,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll, ONLY: UPCASE @@ -312,7 +313,7 @@ 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) :: 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 @@ -354,57 +355,39 @@ REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBYRM ,PLBYSVM ! in x and y-d ! ! ! 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) :: 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 -! +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) :: 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 ! !* 0.2 declarations of local variables ! -REAL, DIMENSION(KIU,KJU,KKU) :: Z3D ! 3D array used to read data - ! in initial file -REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK ! to compute supersaturation -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER (LEN=2) :: YDIR ! -INTEGER :: ILUOUT ! Unit number for prints -INTEGER :: JSV ! Loop index for additional - ! scalar variables -INTEGER :: ISV ! total number of scalar variables -INTEGER :: JKLOOP,JRR ! Loop indexes -INTEGER :: IIUP,IJUP ! size of working - ! window arrays -REAL :: Z1,Z2 ! coeff. for the temporal - ! interpolation -INTEGER :: JT ! loop index -REAL, DIMENSION(KKU) :: Z1D ! forcing working arrays -INTEGER, DIMENSION(3) :: ITDATE ! date array -CHARACTER(LEN=3) :: YFRC ! To mark the different forcing dates -LOGICAL :: GLSOURCE ! switch for the source term (for ini_ls and ini_lb) -CHARACTER (LEN=2) :: YSTORAGE_TYPE -! --------------------------------------------------------------------- -! Modif PP ADV FRC -REAL, DIMENSION(KIU) :: X1D ! forcing working arrays -REAL, DIMENSION(KIU,KJU,KKU):: XDTH3D,XDRV3D -! -CHARACTER(LEN=2) :: INDICE -INTEGER :: I -TYPE(TFIELDDATA) :: TZFIELD +INTEGER :: I +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) +CHARACTER(LEN=2) :: INDICE +CHARACTER(LEN=3) :: YFRC ! To mark the different forcing dates +REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK ! to compute supersaturation +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! @@ -412,11 +395,8 @@ TYPE(TFIELDDATA) :: TZFIELD ! --------------- ! GLSOURCE=.FALSE. -Z3D = 0.0 ZWORK = 0.0 ! -IF (IRESP /= 0) YSTORAGE_TYPE='TT' -! !------------------------------------------------------------------------------- ! !* 2. READ PROGNOSTIC VARIABLES @@ -425,77 +405,52 @@ IF (IRESP /= 0) YSTORAGE_TYPE='TT' !* 2.1 Time t: ! IF (KMASDEV<50) THEN - YRECFM = 'UM' + CALL IO_READ_FIELD(TPINIFILE,'UM',PUT) + CALL IO_READ_FIELD(TPINIFILE,'VM',PVT) + CALL IO_READ_FIELD(TPINIFILE,'WM',PWT) + CALL IO_READ_FIELD(TPINIFILE,'THM',PTHT) + CALL IO_READ_FIELD(TPINIFILE,'PABSM',PPABST) ELSE - YRECFM = 'UT' + CALL IO_READ_FIELD(TPINIFILE,'UT',PUT) + CALL IO_READ_FIELD(TPINIFILE,'VT',PVT) + CALL IO_READ_FIELD(TPINIFILE,'WT',PWT) + CALL IO_READ_FIELD(TPINIFILE,'THT',PTHT) + CALL IO_READ_FIELD(TPINIFILE,'PABST',PPABST) ENDIF -CALL IO_READ_FIELD(TPINIFILE,YRECFM,PUT) -! -IF (KMASDEV<50) THEN - YRECFM = 'VM' -ELSE - YRECFM = 'VT' -END IF -CALL IO_READ_FIELD(TPINIFILE,YRECFM,PVT) -! -IF (KMASDEV<50) THEN - YRECFM = 'WM' -ELSE - YRECFM = 'WT' -END IF -CALL IO_READ_FIELD(TPINIFILE,YRECFM,PWT) -! -IF (KMASDEV<50) THEN - YRECFM = 'THM' -ELSE - YRECFM = 'THT' -END IF -CALL IO_READ_FIELD(TPINIFILE,YRECFM,PTHT) -! -IF (KMASDEV<50) THEN - YRECFM = 'PABSM' -ELSE - YRECFM = 'PABST' -END IF -CALL IO_READ_FIELD(TPINIFILE,YRECFM,PPABST) -PPABSM = PPABST ! SELECT CASE(HGETTKET) CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'TKEM' + CALL IO_READ_FIELD(TPINIFILE,'TKEM',PTKET) ELSE - YRECFM = 'TKET' + CALL IO_READ_FIELD(TPINIFILE,'TKET',PTKET) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PTKET) IF (KMASDEV>50 .AND. (CCONF == 'RESTA')) THEN - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRTKEMS) + CALL IO_READ_FIELD(TPINIFILE,'TKEMS',PRTKEMS) END IF CASE('INIT') - PTKET(:,:,:)=XTKEMIN - PRTKEMS(:,:,:)=0. + PTKET(:,:,:) = XTKEMIN + PRTKEMS(:,:,:) = 0. END SELECT ! SELECT CASE(HGETRVT) ! vapor CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RVM' + CALL IO_READ_FIELD(TPINIFILE,'RVM',PRT(:,:,:,IDX_RVT)) ELSE - YRECFM='RVT' + CALL IO_READ_FIELD(TPINIFILE,'RVT',PRT(:,:,:,IDX_RVT)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RVT)) CASE('INIT') - PRT(:,:,:,IDX_RVT)=0. + PRT(:,:,:,IDX_RVT) = 0. END SELECT ! SELECT CASE(HGETRCT) ! cloud CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RCM' + CALL IO_READ_FIELD(TPINIFILE,'RCM',PRT(:,:,:,IDX_RCT)) ELSE - YRECFM='RCT' + CALL IO_READ_FIELD(TPINIFILE,'RCT',PRT(:,:,:,IDX_RCT)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RCT)) CASE('INIT') PRT(:,:,:,IDX_RCT) = 0. END SELECT @@ -503,11 +458,10 @@ END SELECT SELECT CASE(HGETRRT) ! rain CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RRM' + CALL IO_READ_FIELD(TPINIFILE,'RRM',PRT(:,:,:,IDX_RRT)) ELSE - YRECFM ='RRT' + CALL IO_READ_FIELD(TPINIFILE,'RRT',PRT(:,:,:,IDX_RRT)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RRT)) CASE('INIT') PRT(:,:,:,IDX_RRT) = 0. END SELECT @@ -515,49 +469,45 @@ END SELECT SELECT CASE(HGETRIT) ! cloud ice CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RIM' + CALL IO_READ_FIELD(TPINIFILE,'RIM',PRT(:,:,:,IDX_RIT)) ELSE - YRECFM ='RIT' + CALL IO_READ_FIELD(TPINIFILE,'RIT',PRT(:,:,:,IDX_RIT)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RIT)) CASE('INIT') - PRT(:,:,:,IDX_RIT)=0. + PRT(:,:,:,IDX_RIT) = 0. END SELECT ! SELECT CASE(HGETRST) ! snow CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RSM' + CALL IO_READ_FIELD(TPINIFILE,'RSM',PRT(:,:,:,IDX_RST)) ELSE - YRECFM ='RST' + CALL IO_READ_FIELD(TPINIFILE,'RST',PRT(:,:,:,IDX_RST)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RST)) CASE('INIT') - PRT(:,:,:,IDX_RST)=0. + PRT(:,:,:,IDX_RST) = 0. END SELECT ! SELECT CASE(HGETRGT) ! graupel CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RGM' + CALL IO_READ_FIELD(TPINIFILE,'RGM',PRT(:,:,:,IDX_RGT)) ELSE - YRECFM ='RGT' + CALL IO_READ_FIELD(TPINIFILE,'RGT',PRT(:,:,:,IDX_RGT)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RGT)) CASE('INIT') - PRT(:,:,:,IDX_RGT)=0. + PRT(:,:,:,IDX_RGT) = 0. END SELECT ! SELECT CASE(HGETRHT) ! hail CASE('READ') IF (KMASDEV<50) THEN - YRECFM = 'RHM' + CALL IO_READ_FIELD(TPINIFILE,'RHM',PRT(:,:,:,IDX_RHT)) ELSE - YRECFM ='RHT' + CALL IO_READ_FIELD(TPINIFILE,'RHT',PRT(:,:,:,IDX_RHT)) END IF - CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RHT)) CASE('INIT') - PRT(:,:,:,IDX_RHT)=0. + PRT(:,:,:,IDX_RHT) = 0. END SELECT ! SELECT CASE(HGETCIT) ! ice concentration @@ -569,7 +519,6 @@ END SELECT ! ! Scalar Variables Reading : Users, C2R2, C1R3, LIMA, ELEC, Chemical SV ! -YDIR='XY' ISV= SIZE(PSVT,4) ! IF (NSV_USER>0) THEN @@ -696,19 +645,17 @@ DO JSV = NSV_LIMA_BEG,NSV_LIMA_END ! N IMM nucl I = 0 IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN - I = I + 1 - WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' - END IF + END IF ! Hom. freez. of CCN - IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN + IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(5))//'T' - END IF -! - TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) - CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z3D) + END IF ! - PSVT(:,:,:,JSV) = Z3D(:,:,:) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) CASE ('INIT') PSVT(:,:,:,JSV) = 0. END SELECT @@ -808,29 +755,47 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN END DO END IF ! -DO JSV = NSV_SLTBEG,NSV_SLTEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_SLTEND>=NSV_SLTBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_SLTBEG,NSV_SLTEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_SLTDEPEND>=NSV_SLTDEPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! IF (NSV_DSTEND>=NSV_DSTBEG) THEN TZFIELD%CSTDNAME = '' @@ -846,7 +811,6 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN TZFIELD%CMNHNAME = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV - YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) CASE ('INIT') PSVT(:,:,:,JSV) = 0. @@ -854,123 +818,194 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN END DO END IF ! -DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. -END SELECT -END DO - -DO JSV = NSV_AERBEG,NSV_AEREND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. -END SELECT -END DO +IF (NSV_AEREND>=NSV_AERBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_AERBEG,NSV_AEREND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_LGBEG,NSV_LGEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_PPBEG,NSV_PPEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF ( IRESP ==0 ) THEN - PSVT(:,:,:,JSV) = Z3D(:,:,:) - ELSE - PSVT(:,:,:,JSV) = 0. - END IF - WRITE(YRECFM,'(A3,I3.3)')'ATC',JSV - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) - IF (IRESP == 0) THEN - PATC(:,:,:,JSV-NSV_PPBEG+1) = Z3D(:,:,:) - ELSE - PATC(:,:,:,JSV-NSV_PPBEG+1) = 0. - ENDIF - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - PATC(:,:,:,JSV-NSV_PPBEG+1) = 0. - END SELECT -END DO +IF (NSV_LGEND>=NSV_LGBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_LGBEG,NSV_LGEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF +! +IF (NSV_PPEND>=NSV_PPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_PPBEG,NSV_PPEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg kg-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP) + IF (IRESP/=0) THEN + PSVT(:,:,:,JSV) = 0. + END IF + ! + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1 + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1 + TZFIELD%CUNITS = 'm-3' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PATC(:,:,:,JSV-NSV_PPBEG+1),IRESP) + IF (IRESP/=0) THEN + PATC(:,:,:,JSV-NSV_PPBEG+1) = 0. + ENDIF + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + PATC(:,:,:,JSV-NSV_PPBEG+1) = 0. + END SELECT + END DO +END IF ! #ifdef MNH_FOREFIRE -DO JSV = NSV_FFBEG,NSV_FFEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF (IRESP == 0) THEN - PSVT(:,:,:,JSV) = Z3D(:,:,:) - ELSE - PSVT(:,:,:,JSV) = 0. - END IF - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_FFEND>=NSV_FFBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_FFBEG,NSV_FFEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP) + IF (IRESP /= 0) THEN + PSVT(:,:,:,JSV) = 0. + END IF + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF #endif ! -DO JSV = NSV_CSBEG,NSV_CSEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF ( IRESP ==0 ) THEN - PSVT(:,:,:,JSV) = Z3D(:,:,:) - ELSE - PSVT(:,:,:,JSV) = 0. - END IF - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_CSEND>=NSV_CSBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CSBEG,NSV_CSEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP) + IF (IRESP /= 0) THEN + PSVT(:,:,:,JSV) = 0. + END IF + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_LNOXBEG,NSV_LNOXEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM='LINOXT' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_LNOXBEG,NSV_LNOXEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = 'LINOXT' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! IF (CCONF == 'RESTA') THEN CALL IO_READ_FIELD(TPINIFILE,'US_PRES',PRUS_PRES) @@ -998,18 +1033,30 @@ IF (CCONF == 'RESTA') THEN END SELECT END DO DO JSV = NSV_C2R2BEG,NSV_C2R2END - IF (JSV == NSV_C2R2BEG ) THEN - YRECFM='RSVS_CLD1' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRSVS_CLD(:,:,:,JSV) = Z3D(:,:,:) - END IF - IF (JSV == NSV_C2R2BEG ) THEN - YRECFM='RSVS_CLD2' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRSVS_CLD(:,:,:,JSV) = Z3D(:,:,:) - END IF + IF (JSV == NSV_C2R2BEG ) THEN + TZFIELD%CMNHNAME = 'RSVS_CLD1' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RSVS_CLD1' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RHS_CLD' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV)) + END IF + IF (JSV == NSV_C2R2BEG ) THEN + TZFIELD%CMNHNAME = 'RSVS_CLD2' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: RSVS_CLD2' + TZFIELD%CUNITS = '1' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = 'X_Y_Z_RHS_CLD' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV)) + END IF END DO END IF ! @@ -1056,8 +1103,7 @@ CALL IO_READ_FIELD(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass ! SELECT CASE(HGETSRCT) ! turbulent flux SRC at time t CASE('READ') - CALL IO_READ_FIELD(TPINIFILE,'SRCT',Z3D) - PSRCT(:,:,:)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,'SRCT',PSRCT) CASE('INIT') PSRCT(:,:,:)=0. END SELECT @@ -1137,65 +1183,127 @@ IF ( LFORCING ) THEN DO JT=1,KFRC ! WRITE (YFRC,'(I3.3)') JT - YRECFM='DTFRC'//YFRC//'%TDATE' ! array of rank 3 for date - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) - TPDTFRC(JT)%TDATE%YEAR = ITDATE(1) - TPDTFRC(JT)%TDATE%MONTH = ITDATE(2) - TPDTFRC(JT)%TDATE%DAY = ITDATE(3) - YRECFM='DTFRC'//YFRC//'%TIME' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,TPDTFRC(JT)%TIME,IGRID,ILENCH, & - YCOMMENT,IRESP) -! - YRECFM='UFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PUFRC(:,JT)=Z1D(:) -! - YRECFM='VFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PVFRC(:,JT)=Z1D(:) -! - YRECFM='WFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PWFRC(:,JT)=Z1D(:) -! - YRECFM='THFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PTHFRC(:,JT)=Z1D(:) -! - YRECFM='RVFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PRVFRC(:,JT)=Z1D(:) -! - YRECFM='TENDTHFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PTENDTHFRC(:,JT)=Z1D(:) -! - YRECFM='TENDRVFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PTENDRVFRC(:,JT)=Z1D(:) -! - YRECFM='GXTHFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PGXTHFRC(:,JT)=Z1D(:) -! - YRECFM='GYTHFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) - PGYTHFRC(:,JT)=Z1D(:) -! - YRECFM='PGROUNDFRC'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PPGROUNDFRC(JT),IGRID,ILENCH,YCOMMENT,IRESP) +! + TZFIELD%CMNHNAME = 'DTFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'seconds since YYYY-MM-DD HH:MM:SS.S' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Date of forcing profile '//YFRC + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEDATE + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTFRC(JT)) +! + TZFIELD%CMNHNAME = 'UFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Zonal component of horizontal forcing wind' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PUFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'VFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Meridian component of horizontal forcing wind' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PVFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'WFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Vertical forcing wind' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PWFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'THFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Forcing potential temperature' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'RVFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Forcing vapor mixing ratio' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRVFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'TENDTHFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Large-scale potential temperature tendency for forcing' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDTHFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'TENDRVFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg kg-1 s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Large-scale vapor mixing ratio tendency for forcing' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDRVFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'GXTHFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K m-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Large-scale potential temperature gradient for forcing' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PGXTHFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'GYTHFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K m-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Large-scale potential temperature gradient for forcing' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PGYTHFRC(:,JT)) +! + TZFIELD%CMNHNAME = 'PGROUNDFRC'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'Pa' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Forcing ground pressure' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPGROUNDFRC(JT)) ! END DO END IF @@ -1204,88 +1312,96 @@ END IF IF (L2D_ADV_FRC) THEN DO JT=1,KADVFRC - WRITE (YFRC,'(I3.3)') JT - YRECFM='DTADV'//YFRC//'%TDATE' ! array of rank 3 for date - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) - TPDTADVFRC(JT)%TDATE%YEAR = ITDATE(1) - TPDTADVFRC(JT)%TDATE%MONTH = ITDATE(2) - TPDTADVFRC(JT)%TDATE%DAY = ITDATE(3) ! - YRECFM='DTADV'//YFRC//'%TIME' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,TPDTADVFRC(JT)%TIME,IGRID,ILENCH, & - YCOMMENT,IRESP) - YRECFM='TH_ADV'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDTH3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PDTHFRC(:,:,:,JT)=XDTH3D(:,:,:) + TZFIELD%CMNHNAME = 'DTADV'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'seconds since YYYY-MM-DD HH:MM:SS.S' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Date and time of the advecting forcing '//YFRC + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEDATE + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTADVFRC(JT)) ! - YRECFM='Q_ADV'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDRV3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - - PDRVFRC(:,:,:,JT)=XDRV3D(:,:,:) + TZFIELD%CMNHNAME = 'TH_ADV'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDTHFRC(:,:,:,JT)) + ! + TZFIELD%CMNHNAME = 'Q_ADV'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg kg-1 s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDRVFRC(:,:,:,JT)) ENDDO ENDIF ! IF (L2D_REL_FRC) THEN DO JT=1,KRELFRC - WRITE (YFRC,'(I3.3)') JT - YRECFM='DTREL'//YFRC//'%TDATE' ! array of rank 3 for date - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) - TPDTRELFRC(JT)%TDATE%YEAR = ITDATE(1) - TPDTRELFRC(JT)%TDATE%MONTH = ITDATE(2) - TPDTRELFRC(JT)%TDATE%DAY = ITDATE(3) - + ! + TZFIELD%CMNHNAME = 'DTREL'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'seconds since YYYY-MM-DD HH:MM:SS.S' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Date and time of the relaxation forcing '//YFRC + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEDATE + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTRELFRC(JT)) + ! ! Relaxation - - YRECFM='TH_REL'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDTH3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - - PTHREL(:,:,:,JT)=XDTH3D(:,:,:) + TZFIELD%CMNHNAME = 'TH_REL'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'K' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHREL(:,:,:,JT)) ! - YRECFM='Q_REL'//YFRC - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDRV3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - - PRVREL(:,:,:,JT)=XDRV3D(:,:,:) - - ENDDO - + TZFIELD%CMNHNAME = 'Q_REL'//YFRC + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRVREL(:,:,:,JT)) + ENDDO ENDIF - ! IF (LUV_FLX) THEN - IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN - YRECFM='VU_FLX' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PVU_FLUX_M,IGRID, & - ILENCH,YCOMMENT,IRESP) - ELSE IF (CCONF == 'START') THEN - PVU_FLUX_M(:,:,:)=0. - END IF + IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN + CALL IO_READ_FIELD(TPINIFILE,'VU_FLX',PVU_FLUX_M) + ELSE IF (CCONF == 'START') THEN + PVU_FLUX_M(:,:,:)=0. + END IF ENDIF ! IF (LTH_FLX) THEN - IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN - YRECFM='VT_FLX' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PVTH_FLUX_M,IGRID, & - ILENCH,YCOMMENT,IRESP) - YRECFM='WT_FLX' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PWTH_FLUX_M,IGRID, & - ILENCH,YCOMMENT,IRESP) + IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN + CALL IO_READ_FIELD(TPINIFILE,'VT_FLX',PVTH_FLUX_M) + CALL IO_READ_FIELD(TPINIFILE,'WT_FLX',PWTH_FLUX_M) ELSE IF (CCONF == 'START') THEN PWTH_FLUX_M(:,:,:)=0. PVTH_FLUX_M(:,:,:)=0. diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index 0c19c6baf..8008ce226 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -1062,24 +1062,7 @@ CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string -INTEGER :: IMASDEV ! mesonh version of the input file -INTEGER :: IBUGFIX ! mesonh bugfix version of the input file -INTEGER :: IIMAX, IJMAX -! -REAL :: ZDIM_SUM -INTEGER :: INFO_ll -! -!* variables for reading of old (masdev4_5 and before) files -LOGICAL, DIMENSION(255) :: GCOVER -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOVER -INTEGER :: JCOVER -CHARACTER(LEN=LEN_HREC) :: YRECFM -!JUANZ -INTEGER :: NCOVER,ICOVER,IKL2 -REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZWORK3D -!JUANZ +INTEGER :: IIMAX, IJMAX TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- @@ -1088,78 +1071,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFN0_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP=0 ! -CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) -CALL IO_READ_FIELD(TPINFILE,'BUGFIX',IBUGFIX) -! -IF ((HREC=='DIM_FULL' .OR. HREC=='DIM_NATURE' .OR. HREC=='DIM_SEA' & - .OR. HREC=='DIM_WATER' .OR. HREC=='DIM_TOWN')& - .AND. (IMASDEV<46 .OR. (IMASDEV==46 .AND. IBUGFIX<=2)) ) THEN - - IF (HREC=='DIM_FULL') THEN - KFIELD=SIZE(NMASK) - ELSE - YRECFM='LCOVER' - CALL FMREAD(CFILE,YRECFM,COUT,'XY',GCOVER(:),IGRID,ILENCH,HCOMMENT,KRESP) - IF (KRESP/=0) THEN - !* ground_ocean case - KFIELD=SIZE(NMASK) - KRESP=0 - ELSE - ALLOCATE(ZCOVER(NIU,NJU,255)) - ZCOVER(:,:,:) = 0. - DO JCOVER=1,255 - IF (.NOT. GCOVER(JCOVER)) CYCLE - WRITE(YRECFM,'(A5,I3.3)') 'COVER',JCOVER - CALL FMREAD(CFILE,YRECFM,COUT,'XY',ZCOVER(:,:,JCOVER),IGRID,ILENCH,HCOMMENT,KRESP) - END DO - SELECT CASE (HREC) - CASE('DIM_SEA') - KFIELD=COUNT(ZCOVER(NIB:NIE,NJB:NJE,1) & - +ZCOVER(NIB:NIE,NJB:NJE,242) & - +ZCOVER(NIB:NIE,NJB:NJE,243)>0.) - CASE('DIM_TOWN') - KFIELD=COUNT(ZCOVER(NIB:NIE,NJB:NJE,7) & - +ZCOVER(NIB:NIE,NJB:NJE,151) & - +ZCOVER(NIB:NIE,NJB:NJE,152) & - +ZCOVER(NIB:NIE,NJB:NJE,153) & - +ZCOVER(NIB:NIE,NJB:NJE,154) & - +ZCOVER(NIB:NIE,NJB:NJE,155) & - +ZCOVER(NIB:NIE,NJB:NJE,156) & - +ZCOVER(NIB:NIE,NJB:NJE,157) & - +ZCOVER(NIB:NIE,NJB:NJE,158) & - +ZCOVER(NIB:NIE,NJB:NJE,159) & - +ZCOVER(NIB:NIE,NJB:NJE,160) & - +ZCOVER(NIB:NIE,NJB:NJE,161)>0.) - CASE('DIM_WATER') - KFIELD=COUNT(ZCOVER(NIB:NIE,NJB:NJE,2) & - +ZCOVER(NIB:NIE,NJB:NJE,3) & - +ZCOVER(NIB:NIE,NJB:NJE,124) & - +ZCOVER(NIB:NIE,NJB:NJE,125) & - +ZCOVER(NIB:NIE,NJB:NJE,176) & - +ZCOVER(NIB:NIE,NJB:NJE,238) & - +ZCOVER(NIB:NIE,NJB:NJE,239) & - +ZCOVER(NIB:NIE,NJB:NJE,240) & - +ZCOVER(NIB:NIE,NJB:NJE,241)>0.) - CASE('DIM_NATURE') - KFIELD=COUNT(ZCOVER(NIB:NIE,NJB:NJE,1) & - +ZCOVER(NIB:NIE,NJB:NJE,2) & - +ZCOVER(NIB:NIE,NJB:NJE,3) & - +ZCOVER(NIB:NIE,NJB:NJE,243)<1.-1.E-8) - END SELECT - DEALLOCATE(ZCOVER) - END IF - END IF - - ZDIM_SUM = FLOAT(KFIELD) - IF (CPROGRAM/='PGD ' .AND. CPROGRAM/='NESPGD') THEN - CALL REDUCESUM_ll(ZDIM_SUM,INFO_ll) - KFIELD=NINT(ZDIM_SUM) - ENDIF - HCOMMENT = ' ' - KRESP = 0 - WRITE(NLUOUT,*) 'HREC=', HREC, 'KFIELD=', KFIELD - -ELSE IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & +IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX) CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX) @@ -1866,7 +1778,7 @@ END SUBROUTINE READ_SURFT0_MNH !* 0. DECLARATIONS ! ------------ ! -USE MODE_FIELD, ONLY : TFIELDDATA,TYPECHAR +USE MODE_FIELD, ONLY : TFIELDDATA,TYPECHAR,TYPEINT,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_MSG @@ -1929,12 +1841,22 @@ END IF ! RETURN !END IF ! -YRECFM=TRIM(HREC)//'%TDATE' -CALL FMREAD(CFILE,YRECFM,COUT,'--',ITDATE(:,:),IGRID,ILENCH,HCOMMENT,KRESP) +TZFIELD%CMNHNAME = TRIM(HREC)//'%TDATE' +TZFIELD%CSTDNAME = '' +TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(TZFIELD%CMNHNAME) +TZFIELD%CUNITS = '' +TZFIELD%CDIR = '--' +TZFIELD%CCOMMENT = TRIM(HCOMMENT) +TZFIELD%NGRID = 0 +TZFIELD%NTYPE = TYPEINT +TZFIELD%NDIMS = 2 +! +CALL IO_READ_FIELD(TPINFILE,TZFIELD,ITDATE(:,:),KRESP) +! KYEAR(:) = ITDATE(1,:) KMONTH(:) = ITDATE(2,:) KDAY(:) = ITDATE(3,:) - +! IF (KRESP /=0) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' @@ -1943,9 +1865,18 @@ IF (KRESP /=0) THEN WRITE(NLUOUT,*) ' ' ENDIF ! -YRECFM=TRIM(HREC)//'%TIME' -CALL FMREAD(CFILE,YRECFM,COUT,'--',PTIME(:),IGRID,ILENCH,HCOMMENT,KRESP) - +TZFIELD%CMNHNAME = TRIM(HREC)//'%TIME' +TZFIELD%CSTDNAME = '' +TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(TZFIELD%CMNHNAME) +TZFIELD%CUNITS = '' +TZFIELD%CDIR = '--' +TZFIELD%CCOMMENT = TRIM(HCOMMENT) +TZFIELD%NGRID = 0 +TZFIELD%NTYPE = TYPEREAL +TZFIELD%NDIMS = 1 +! +CALL IO_READ_FIELD(TPINFILE,TZFIELD,PTIME(:),KRESP) +! IF (KRESP /=0) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90 index 9b05fd882..efbac78f8 100644 --- a/src/MNH/spawn_field2.f90 +++ b/src/MNH/spawn_field2.f90 @@ -153,50 +153,43 @@ END MODULE MODI_SPAWN_FIELD2 !* 0. DECLARATIONS ! ------------ ! -USE MODD_IO_ll, ONLY : TFILEDATA -USE MODD_PARAMETERS ! Declarative modules +USE MODD_2D_FRC +USE MODD_ADVFRC_n +USE MODD_BIKHARDT_n +USE MODD_CH_AEROSOL, ONLY: CAERONAMES +USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES USE MODD_CONF USE MODD_CST -! -USE MODD_CONF_n, ONLY: CONF_MODEL -USE MODD_LBC_n, ONLY: LBC_MODEL -USE MODD_LUNIT_n, ONLY: LUNIT_MODEL -USE MODD_FIELD_n, ONLY: FIELD_MODEL -USE MODD_REF_n, ONLY: REF_MODEL -! -USE MODD_NSV -USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES -USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES +USE MODD_CONF_n, ONLY: CONF_MODEL USE MODD_DUST, ONLY: CDUSTNAMES -USE MODD_SALT, ONLY: CSALTNAMES -USE MODD_CH_AEROSOL, ONLY: CAERONAMES -USE MODD_LG, ONLY: CLGNAMES USE MODD_ELEC_DESCR, ONLY: CELECNAMES -! -USE MODD_BIKHARDT_n -USE MODD_LUNIT_n -USE MODD_SPAWN -! -USE MODI_BIKHARDT -! -USE MODE_FMREAD -USE MODE_THERMO -USE MODE_MODELN_HANDLER -USE MODE_IO_ll, ONLY: UPCASE -! +USE MODD_FIELD_n, ONLY: FIELD_MODEL +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_LATZ_EDFLX +USE MODD_LBC_n, ONLY: LBC_MODEL +USE MODD_LG, ONLY: CLGNAMES +USE MODD_LUNIT_n, ONLY: CLUOUT,LUNIT_MODEL +USE MODD_NSV +USE MODD_REF_n, ONLY: REF_MODEL +USE MODD_PARAMETERS USE MODD_PARAM_LIMA , ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,& LSCAV, LAERO_MASS, LHHONI USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_NAMES USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_NAMES, CAERO_MASS -! -USE MODD_ADVFRC_n +USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES USE MODD_RELFRC_n -USE MODD_2D_FRC -! -USE MODD_LATZ_EDFLX +USE MODD_SALT, ONLY: CSALTNAMES +USE MODD_SPAWN ! -USE MODE_MPPDB +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL +USE MODE_FMREAD +USE MODE_IO_ll, ONLY: UPCASE USE MODE_ll +USE MODE_MODELN_HANDLER +USE MODE_MPPDB +USE MODE_THERMO +! +USE MODI_BIKHARDT ! IMPLICIT NONE ! @@ -271,15 +264,9 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZPABST1,ZHUT1 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRT1 LOGICAL :: GUSERV ! -INTEGER :: IGRID,ILENCH ! File -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM ! management -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM_T ! management -CHARACTER (LEN=NMNHNAMELGTMAX) :: YRECFM_M ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER (LEN=2) :: YDIR -! CHARACTER(LEN=2) :: INDICE INTEGER :: I +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! @@ -727,7 +714,6 @@ END IF ! (LS fields are not treated because they are identical in the father file) ! IF (PRESENT(TPSONFILE)) THEN - YDIR='XY' ! !variables which always exist ! @@ -743,44 +729,37 @@ IF (PRESENT(TPSONFILE)) THEN IRR=1 IF (IRR<=CONF_MODEL(1)%NRR) THEN GUSERV=.TRUE. - YRECFM='RVT' ! Vapor at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'RVT',ZWORK3D,IRESP) ! Vapor at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN - YRECFM='RCT' ! Cloud at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'RCT',ZWORK3D,IRESP) ! Cloud at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN - YRECFM='RRT' ! Rain at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'RRT',ZWORK3D,IRESP) ! Rain at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN - YRECFM='RIT' ! Ice at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'RIT',ZWORK3D,IRESP) ! Ice at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN - YRECFM='RST' ! Snow at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'RST',ZWORK3D,IRESP) ! Snow at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN - YRECFM='RGT' ! Graupel at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'RGT',ZWORK3D,IRESP) ! Graupel at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN - YRECFM='RHT' ! Hail at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'HVT',ZWORK3D,IRESP) ! Hail at time t IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF @@ -788,11 +767,9 @@ IF (PRESENT(TPSONFILE)) THEN WRITE(ILUOUT,FMT=*) 'SPAWN_FIELD2: spawing with a SON input file' WRITE(ILUOUT,FMT=*) ' ',CONF_MODEL(1)%NRR,' moist variables in model1 and model2, ', & IRR,' moist variables in input SON' - YRECFM='THT' ! Theta at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'THT',ZWORK3D) ! Theta at time t ZTHT1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - YRECFM='PABST' ! Pressure at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'PABST',ZWORK3D) ! Pressure at time t ZPABST1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) ! CALL COMPUTE_THV_HU(GUSERV,ZRT1,ZTHT1,ZPABST1,ZTHVT1,ZHUT1) @@ -806,184 +783,380 @@ IF (PRESENT(TPSONFILE)) THEN ! TKE variables ! IF (HTURB/='NONE') THEN - YRECFM='TKET' ! Turbulence Kinetic Energy at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'TKET',ZWORK3D,IRESP) ! Turbulence Kinetic Energy at time t IF(IRESP==0) PTKET(KIB2:KIE2,KJB2:KJE2,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END IF ! ! Scalar variables ! IF (NSV /= 0) THEN - DO JSV = 1, NSV_USER ! Users Scalar Variables - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_C2R2BEG,NSV_C2R2END ! C2R2 Scalar Variables - YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO -! -! LIMA variables -! + ! User scalar variables + IF (NSV_USER>0) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1, NSV_USER ! Users Scalar Variables + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! microphysical C2R2 scheme scalar variables + IF (NSV_C2R2END>=NSV_C2R2BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C2R2BEG,NSV_C2R2END + TZFIELD%CMNHNAME = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! LIMA variables + ! DO JSV = NSV_LIMA_BEG,NSV_LIMA_END -! Nc + TZFIELD%CSTDNAME = '' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + TZFIELD%CDIR = 'XY' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! Nc IF (JSV .EQ. NSV_LIMA_NC) THEN - YRECFM_T=TRIM(CLIMA_WARM_NAMES(1))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(1))//'T' END IF -! Nr + ! Nr IF (JSV .EQ. NSV_LIMA_NR) THEN - YRECFM_T=TRIM(CLIMA_WARM_NAMES(2))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(2))//'T' END IF -! N CCN free + ! N CCN free IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN - WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) - YRECFM_T=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' END IF -! N CCN acti + ! N CCN acti IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN - WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) - YRECFM_T=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' END IF -! Scavenging + ! Scavenging IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN - YRECFM_T=TRIM(CAERO_MASS(1))//'T' + TZFIELD%CMNHNAME = TRIM(CAERO_MASS(1))//'T' + TZFIELD%CUNITS = 'kg kg-1' END IF -! Ni + ! Ni IF (JSV .EQ. NSV_LIMA_NI) THEN - YRECFM_T=TRIM(CLIMA_COLD_NAMES(1))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(1))//'T' END IF -! N IFN free + ! N IFN free IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN - WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) - YRECFM_T=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' END IF -! N IFN nucl + ! N IFN nucl IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN - WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) - YRECFM_T=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' END IF -! N IMM nucl + ! N IMM nucl I = 0 IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN - I = I + 1 - WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) - YRECFM_T=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + I = I + 1 + WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' END IF -! Hom. freez. of CCN + ! Hom. freez. of CCN IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN - YRECFM_T=TRIM(CLIMA_COLD_NAMES(5))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(5))//'T' END IF -! time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM_T,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO -! - DO JSV = NSV_ELECBEG,NSV_ELECEND ! ELEC Scalar Variables - YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_CHEMBEG,NSV_CHEMEND ! Chemical Scalar Variables - YRECFM=TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_CHICBEG,NSV_CHICEND ! Ice phase chemical Scalar Variables - YRECFM=TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_AERBEG,NSV_AEREND ! Orilam Scalar Variables - YRECFM=TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_DSTBEG,NSV_DSTEND ! Dust Scalar Variables - YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_SLTBEG,NSV_SLTEND ! Sea Salt Scalar Variables - YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_LGBEG,NSV_LGEND ! LG Scalar Variables - YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_LNOXBEG,NSV_LNOXEND ! LNOx Scalar Variables - YRECFM='LINOX' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = NSV_PPBEG,NSV_PPEND ! Passive scalar variables - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) + ! time t + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO + ! + ! ELEC Scalar Variables + ! + IF (NSV_ELECEND>=NSV_ELECBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_ELECBEG,NSV_ELECEND + TZFIELD%CMNHNAME = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN + TZFIELD%CUNITS = 'C m-3' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)' + ELSE + TZFIELD%CUNITS = 'm-3' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)' + END IF + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Chemical Scalar Variables + ! + IF (NSV_CHEMEND>=NSV_CHEMBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHEMBEG,NSV_CHEMEND + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)' + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Ice phase chemical Scalar Variables + ! + IF (NSV_CHICEND>=NSV_CHICBEG) THEN + CICNAMES(JSV-NSV_CHICBEG+1) = UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)) + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHICBEG,NSV_CHICEND + TZFIELD%CMNHNAME = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)' + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Orilam Scalar Variables + ! + IF (NSV_AEREND>=NSV_AERBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_AERBEG,NSV_AEREND + TZFIELD%CMNHNAME = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Dust Scalar Variables + ! + IF (NSV_DSTEND>=NSV_DSTBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_DSTBEG,NSV_DSTEND + TZFIELD%CMNHNAME = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Sea Salt Scalar Variables + ! + IF (NSV_SLTEND>=NSV_SLTBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_SLTBEG,NSV_SLTEND + TZFIELD%CMNHNAME = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! LG Scalar Variables + ! + IF (NSV_LGEND>=NSV_LGBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_LGBEG,NSV_LGEND + TZFIELD%CMNHNAME = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! LNOx Scalar Variables + ! +!PW:TODO/bug1?: LINOX or LINOXT? +!PW:TODO/bug2?: Same name of variable in a loop! + IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' !PW: TODO: not sure (depends if LINOX or LINOXT) + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_LNOXBEG,NSV_LNOXEND + TZFIELD%CMNHNAME = 'LINOX' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Passive scalar variables + ! + IF (NSV_PPEND>=NSV_PPBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_PPBEG,NSV_PPEND + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF #ifdef MNH_FOREFIRE - DO JSV = NSV_FFBEG,NSV_FFEND ! ForeFire variables - WRITE(YRECFM,'(A3,I3.3)')'SVM',JSV - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO + ! + ! ForeFire variables + ! + IF (NSV_FFEND>=NSV_FFBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_FFBEG,NSV_FFEND + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF #endif - DO JSV = NSV_CSBEG,NSV_CSEND ! Passive scalar variables - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO - DO JSV = 1,NSV_PP ! Passive scalar variables - YRECFM='ATC' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) - IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO + ! + ! Passive scalar variables + ! + IF (NSV_CSEND>=NSV_CSBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CSBEG,NSV_CSEND + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF + ! + ! Passive scalar variables + ! + IF (NSV_PP>=1) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1,NSV_PP + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1 + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1 + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF #ifdef MNH_FOREFIRE - DO JSV = 1,NSV_FF ! ForeFire variables - YRECFM='ATC' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) - IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - END DO + ! + ! ForeFire variables + ! + IF (NSV_FF>=1) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1,NSV_FF + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_FFBEG-1 + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_FFBEG-1 + CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP) + IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) + END DO + END IF #endif END IF ! ! Secondary pronostic variables ! IF (HTURB /= 'NONE' .AND. IRR>1) THEN - YRECFM='SRCT' ! turbulent flux SRC at time t - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) - IF( IRESP /= 0 ) THEN - YRECFM='SRC' - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - END IF + CALL IO_READ_FIELD(TPSONFILE,'SRCT',ZWORK3D,IRESP) ! turbulent flux SRC at time t IF(IRESP == 0) PSRCT(KIB2:KIE2,KJB2:KJE2,:) = & ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - - YRECFM='SIGS' ! subgrid condensation - CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'SIGS',ZWORK3D,IRESP) ! subgrid condensation IF(IRESP == 0) PSIGS(KIB2:KIE2,KJB2:KJE2,:) = & ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END IF -- GitLab