diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index c94e8e1cdf789b29d6600b81636203402c87adfd..95d974d336a34aec1d2e8f9b00279e7cdccb2d4d 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -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 diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index d6f594f44b3457dcfbf52a02986f52ffeec2f564..36ea691c59958820dfd0e2adbb0f93a43c8326e6 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -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 diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90 index 9d533aa6c5dea38e7341b584da432da9f52922f4..de7c186f555043e0947f98e14f99642693afedfd 100644 --- a/src/MNH/init_mnh.f90 +++ b/src/MNH/init_mnh.f90 @@ -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)