Skip to content
Snippets Groups Projects
Commit 7d6f3d39 authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 19/06/2017: IO:

* added IO_READ_FIELD interface
* 1st version of IO_READ_FIELD_BYFIELD_N0 (not yet fully implemented)
* restructuration of INI_SEG_n to allow earlier initialization of TFIELDLIST
parent a5a861d3
Branches
Tags
No related merge requests found
......@@ -26,7 +26,10 @@ MODULE MODE_FMREAD
! J.Escobar : 13/01/2015 : remove comment on BCAST(IRESP in FMREADX2_ll
! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!
USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
USE MODD_MPIF
!
USE MODE_FIELD
#if defined(MNH_IOCDF4)
USE MODE_NETCDF
#endif
......@@ -36,6 +39,29 @@ IMPLICIT NONE
PRIVATE
INTERFACE IO_READ_FIELD
MODULE PROCEDURE IO_READ_FIELD_BYNAME_N0, &
IO_READ_FIELD_BYFIELD_N0
! IO_READ_FIELD_BYNAME_X0, IO_READ_FIELD_BYNAME_X1, &
! IO_READ_FIELD_BYNAME_X2, IO_READ_FIELD_BYNAME_X3, &
! IO_READ_FIELD_BYNAME_X4, IO_READ_FIELD_BYNAME_X5, &
! IO_READ_FIELD_BYNAME_X6, &
! IO_READ_FIELD_BYNAME_N1, &
! IO_READ_FIELD_BYNAME_N2, IO_READ_FIELD_BYNAME_N3, &
! IO_READ_FIELD_BYNAME_L0, IO_READ_FIELD_BYNAME_L1, &
! IO_READ_FIELD_BYNAME_C0, IO_READ_FIELD_BYNAME_C1, &
! IO_READ_FIELD_BYNAME_T0, &
! IO_READ_FIELD_BYFIELD_X0,IO_READ_FIELD_BYFIELD_X1, &
! IO_READ_FIELD_BYFIELD_X2,IO_READ_FIELD_BYFIELD_X3, &
! IO_READ_FIELD_BYFIELD_X4,IO_READ_FIELD_BYFIELD_X5, &
! IO_READ_FIELD_BYFIELD_X6, &
! IO_READ_FIELD_BYFIELD_N1, &
! IO_READ_FIELD_BYFIELD_N2,IO_READ_FIELD_BYFIELD_N3, &
! IO_READ_FIELD_BYFIELD_L0,IO_READ_FIELD_BYFIELD_L1, &
! IO_READ_FIELD_BYFIELD_C0,IO_READ_FIELD_BYFIELD_C1, &
! IO_READ_FIELD_BYFIELD_T0
END INTERFACE
INTERFACE FMREAD
MODULE PROCEDURE FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,&
& FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,&
......@@ -48,8 +74,7 @@ PUBLIC FMREAD_LB,FMREAD,FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,&
& FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,&
& FMREADN0_ll,FMREADN1_ll,FMREADN2_ll,&
& FMREADL0_ll,FMREADL1_ll,FMREADC0_ll,FMREADT0_ll
!INCLUDE 'mpif.h'
PUBLIC IO_READ_FIELD
CONTAINS
SUBROUTINE FM_READ_ERR(HFUNC,HFILEM,HFIPRI,HRECFM,HDIR,KRESP)
......@@ -1249,6 +1274,90 @@ RETURN
END SUBROUTINE FMREADN0_ll
SUBROUTINE IO_READ_FIELD_BYNAME_N0(TPFILE,HNAME,HFIPRI,KFIELD,KRESP)
!
TYPE(TFILEDATA), INTENT(IN) :: TPFILE
CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write
CHARACTER(LEN=*), INTENT(IN) :: HFIPRI ! output file for error messages
INTEGER, INTENT(INOUT) :: KFIELD ! array containing the data field
INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code
!
INTEGER :: ID ! Index of the field
INTEGER :: IRESP ! return_code
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
!
CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
!
IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KFIELD,IRESP)
!
IF (PRESENT(KRESP)) KRESP = IRESP
!
END SUBROUTINE IO_READ_FIELD_BYNAME_N0
SUBROUTINE IO_READ_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP)
!
USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
USE MODD_FM
USE MODE_FD_ll, ONLY : GETFD,FD_LL
!
TYPE(TFILEDATA), INTENT(IN) :: TPFILE
TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD
INTEGER, INTENT(INOUT) :: KFIELD ! array containing the data field
INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code
!
INTEGER :: IERR
TYPE(FD_ll), POINTER :: TZFD
INTEGER :: IRESP
TYPE(FMHEADER) :: TZFMH
CHARACTER(LEN=:),ALLOCATABLE :: YMSG
CHARACTER(LEN=6) :: YRESP
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
!
IRESP = 0
!
TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
IF (ASSOCIATED(TZFD)) THEN
IF (GSMONOPROC) THEN ! sequential execution
IF (ASSOCIATED(TZFD%CDF)) THEN
CALL NCREAD(TZFD%CDF%NCID,TPFIELD%CMNHNAME,KFIELD,TZFMH,IRESP)
ELSE
CALL FM_READ_ll(TZFD%FLU,TPFIELD%CMNHNAME,.FALSE.,1,KFIELD,TZFMH,IRESP)
END IF
ELSE
IF (ISP == TZFD%OWNER) THEN
IF (ASSOCIATED(TZFD%CDF)) THEN
CALL NCREAD(TZFD%CDF%NCID,TPFIELD%CMNHNAME,KFIELD,TZFMH,IRESP)
ELSE
CALL FM_READ_ll(TZFD%FLU,TPFIELD%CMNHNAME,.FALSE.,1,KFIELD,TZFMH,IRESP)
END IF
END IF
!
CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR)
!
CALL BCAST_HEADER(TZFD,TZFMH)
!
CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR)
END IF
! KGRID = TZFMH%GRID
! HCOMMENT = TZFMH%COMMENT(1:TZFMH%COMLEN)
ELSE
IRESP = -61
CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N0','file '//TRIM(TPFILE%CNAME)//' not found')
END IF
!
IF (IRESP.NE.0) THEN
WRITE(YRESP, '( I6 )') IRESP
YMSG = 'RESP='//YRESP//' when reading '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_N0',YMSG)
ENDIF
!
IF (PRESENT(KRESP)) KRESP = IRESP
!
END SUBROUTINE IO_READ_FIELD_BYFIELD_N0
SUBROUTINE FMREADN1_ll(HFILEM,HRECFM,HFIPRI,HDIR,KFIELD,KGRID,&
KLENCH,HCOMMENT,KRESP)
USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
......
......@@ -169,21 +169,22 @@ END MODULE MODI_INI_SEG_n
!
!* 0. DECLARATIONS
! ------------
USE MODD_LUNIT
USE MODD_CONF
USE MODN_CONFZ
USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
USE MODN_CONFZ
USE MODD_DYN
USE MODD_IO_ll, ONLY : LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILEDATA
USE MODD_LUNIT
USE MODD_LUNIT_n, ONLY : CINIFILE_n=> CINIFILE,CINIFILEPGD_n=> CINIFILEPGD
USE MODN_LUNIT_n
USE MODD_PARAM_n, ONLY : CSURF
USE MODD_PARAMETERS
USE MODD_DYN
USE MODD_REF, ONLY : LBOUSS
USE MODD_IO_ll, ONLY : GSMONOPROC
USE MODD_PARAM_n, ONLY : CSURF
!
USE MODE_FIELD
USE MODE_FMREAD
USE MODE_FM
USE MODE_IO_ll
USE MODE_MSG
USE MODE_POS
!
USE MODI_DEFAULT_DESFM_n
......@@ -192,6 +193,7 @@ USE MODI_READ_EXSEG_n
USE MODI_WRITE_DESFM_n
!
USE MODN_CONFIO, ONLY : NAM_CONFIO
USE MODN_LUNIT_n
!
IMPLICIT NONE
!
......@@ -256,6 +258,7 @@ CHARACTER (LEN=4) :: YSCONV
CHARACTER (LEN=4) :: YCLOUD
CHARACTER (LEN=4) :: YELEC
CHARACTER (LEN=3) :: YEQNSYS
TYPE(TFILEDATA) :: TZFILE
!
!-------------------------------------------------------------------------------
!
......@@ -348,49 +351,78 @@ IF (CPROGRAM=='MESONH') THEN
HINIFILE=CINIFILE_n
CALL FMOPEN_ll(HINIFILE,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP)
END IF
CALL FMREAD(HINIFILE,'MASDEV',HLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
IF (CPROGRAM=='MESONH') THEN
IF (IMASDEV > 49) THEN
YRECFM='COUPLING'
YDIR='--'
CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
IF (LCOUPLING) THEN
WRITE(ILUOUT,*) 'Error with the initial file'
WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
!callabortstop
CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
CALL ABORT
STOP
ENDIF
ENDIF
!
!-------------------------------------------------------------------------------
!
!* 4. READ DESFM FILE
! ---------------
!
YDESFM=TRIM(ADJUSTL(HINIFILE))//'.des'
!
CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC, &
GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST, &
GDEPOS_DST, GCHTRANS, GORILAM, &
GDEPOS_AER, GLG, GPASPOL, &
#ifdef MNH_FOREFIRE
GFOREFIRE, &
#endif
GLNOX_EXPLICIT, &
GCONDSAMP, IRIMX,IRIMY,ISV, &
YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS )
!
!-------------------------------------------------------------------------------
!
!* 5. Initialize fieldlist
! --------------------
!
IF (KMI==1) THEN !Do this only 1 time
IF (CPROGRAM=='SPAWN ') THEN
CALL INI_FIELD_LIST(2)
ELSE IF (CPROGRAM/='REAL ' .AND. CPROGRAM/='IDEAL ' ) THEN
CALL INI_FIELD_LIST()
END IF
IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPROGRAM=='MESONH') THEN
CALL INI_FIELD_SCALARS()
END IF
END IF
IF (CPROGRAM=='SPAWN ') THEN
!
!-------------------------------------------------------------------------------
!
!* 6. READ in the LFI file SOME VARIABLES of MODD_CONF
! ------------------------------------------------
!
TZFILE%CNAME = HINIFILE
!TZFILE%CTYPE = ''
CALL PRINT_MSG(NVERB_WARNING,'IO','INI_SEG_n','filetype not (yet) set')
IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN
TZFILE%CFORMAT = 'NETCDF4'
ELSE
TZFILE%CFORMAT = 'LFI'
TZFILE%NLFINPRAR = 0
ENDIF
TZFILE%CMODE = 'READ'
TZFILE%NLFITYPE = 2
TZFILE%NLFIVERB = NVERB
CALL IO_READ_FIELD(TZFILE,'MASDEV',IMASDEV)
!
IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
IF (IMASDEV > 49) THEN
YRECFM='COUPLING'
YDIR='--'
CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
IF (LCOUPLING) THEN
WRITE(ILUOUT,*) 'Error with the initial file'
WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
!callabortstop
CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
CALL ABORT
WRITE(ILUOUT,*) 'Error with the initial file'
WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
!callabortstop
CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
CALL ABORT
STOP
ENDIF
ENDIF
END IF
!
!-------------------------------------------------------------------------------
!
!* 4. READ in the LFI file SOME VARIABLES of MODD_CONF
! ------------------------------------------------
!
! Read the storage type
YRECFM = 'STORAGE_TYPE'
......@@ -444,27 +476,7 @@ END IF
!
!-------------------------------------------------------------------------------
!
!* 5. READ DESFM FILE
! ---------------
!
YDESFM=TRIM(ADJUSTL(HINIFILE))//'.des'
!
CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC, &
GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST, &
GDEPOS_DST, GCHTRANS, GORILAM, &
GDEPOS_AER, GLG, GPASPOL, &
#ifdef MNH_FOREFIRE
GFOREFIRE, &
#endif
GLNOX_EXPLICIT, &
GCONDSAMP, IRIMX,IRIMY,ISV, &
YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS )
!
!
!-------------------------------------------------------------------------------
!
!* 6. READ EXSEG FILE
!* 7. READ EXSEG FILE
! ---------------
! We pass by arguments the informations read in DESFM descriptor to the
! routine which read related informations in the EXSEG descriptor in order to
......
......@@ -176,15 +176,6 @@ END IF
CALL GOTO_MODEL(1)
CALL INI_SEG_n(1,YLUOUT(1),YINIFILE(1),YINIFILEPGD(1),ZTSTEP_ALL)
!
IF (CPROGRAM=='SPAWN ') THEN
CALL INI_FIELD_LIST(2)
ELSE IF (CPROGRAM/='REAL ' .AND. CPROGRAM/='IDEAL ' ) THEN
CALL INI_FIELD_LIST()
END IF
IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPROGRAM=='MESONH') THEN
CALL INI_FIELD_SCALARS()
END IF
!
DO JMI=2,NMODEL
CALL GOTO_MODEL(JMI)
CALL INI_SEG_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI),ZTSTEP_ALL)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment