From c7fe1b944e40872e68edd06fa089dc1476886782 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 20 Apr 2017 16:24:51 +0200 Subject: [PATCH] Philippe 20/04/2017: IO: * use new structures of files and fields for PREP_SURFEX * bug correction when writing empty DAD_NAME * adapt WRITE_SURFT0_MNH to new structures --- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 2 +- src/MNH/prep_surfex.f90 | 84 ++++++++++++++++++----------- src/MNH/write_surf_mnh.f90 | 46 ++++++++-------- src/MNH/zoom_pgd.f90 | 1 + 4 files changed, 79 insertions(+), 54 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 678318990..52a25c561 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -281,7 +281,7 @@ CONTAINS CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',HLUOUT,IRESP,TPFILE%TDADFILE%CNAME) ELSE CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_HEADER','TPFILE%TDADFILE not associated') - CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',HLUOUT,IRESP,'') + CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',HLUOUT,IRESP,' ') ENDIF ! END SUBROUTINE IO_WRITE_HEADER diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90 index a628994ed..701baacf3 100644 --- a/src/MNH/prep_surfex.f90 +++ b/src/MNH/prep_surfex.f90 @@ -35,29 +35,28 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODE_FM -USE MODE_IO_ll -USE MODE_ll -USE MODE_FMREAD -USE MODE_FMWRIT -! -USE MODI_OPEN_PRC_FILES -! -USE MODD_PARAMETERS, ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF -USE MODD_LUNIT, ONLY : CLUOUT0, CPGDFILE,COUTFMFILE -USE MODD_CONF, ONLY : CPROGRAM,NMASDEV,NBUGFIX,CBIBUSER,& - L1D, L2D, LPACK +USE MODD_CONF, ONLY : CPROGRAM,NMASDEV,NBUGFIX,CBIBUSER,& + L1D, L2D, LPACK +USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +USE MODD_IO_ll, ONLY : TFILEDATA, LIOCDF4, LLFIOUT, TFILE_SURFEX +USE MODD_LUNIT, ONLY : CLUOUT0, CPGDFILE,COUTFMFILE USE MODD_LUNIT_n, ONLY : CINIFILE +USE MODD_MNH_SURFEX_n +USE MODD_PARAMETERS, ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF USE MODD_TIME_n, ONLY : TDTCUR -USE MODD_CONF_n, ONLY : CSTORAGE_TYPE ! +USE MODE_FIELD +USE MODE_FM +USE MODE_FMREAD +USE MODE_FMWRIT +USE MODE_IO_ll +USE MODE_ll USE MODE_MODELN_HANDLER -!JUANZ USE MODE_SPLITTINGZ_ll -!JUANZ -USE MODI_VERSION +! +USE MODI_OPEN_PRC_FILES USE MODI_READ_ALL_NAMELISTS -USE MODD_MNH_SURFEX_n +USE MODI_VERSION ! IMPLICIT NONE ! @@ -84,10 +83,10 @@ INTEGER :: ININAR ! number of articles initially ! INTEGER :: IINFO_ll ! return code of // routines CHARACTER (LEN=100) :: HCOMMENT -CHARACTER(LEN=28) :: YDAD =' ' -! name of dad of input FM file INTEGER :: II, IJ, IGRID, ILENGTH ! +TYPE(TFILEDATA),TARGET :: TZFILE +! !------------------------------------------------------------------------------- ! ! @@ -113,7 +112,28 @@ CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE & CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! CPGDFILE = YPGDFILE -CALL FMOPEN_ll(CINIFILE,'WRITE',CLUOUT0,0,1,1,ININAR,IRESP) +! +TZFILE%CNAME = CINIFILE +TZFILE%CTYPE = 'PREPSURFEX' +print *,'PW: LIOCDF4=',LIOCDF4 +IF (LIOCDF4) THEN + IF (.NOT.LLFIOUT) THEN + TZFILE%CFORMAT='NETCDF4' + ELSE + TZFILE%CFORMAT='LFICDF4' + TZFILE%NLFINPRAR= 0 + END IF +ELSE IF (LLFIOUT) THEN + TZFILE%CFORMAT='LFI' + TZFILE%NLFINPRAR= 0 +ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_REAL_CASE','unknown backup/output fileformat') +ENDIF +TZFILE%CMODE = 'WRITE' +TZFILE%NLFITYPE = 1 +TZFILE%NLFIVERB = 1 +! +CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT0,IRESP) ! !------------------------------------------------------------------------------- ! @@ -152,6 +172,10 @@ CALL SET_DAD_ll(0, 1) !JUANZ CALL INI_PARA_ll(IINFO_ll) CALL INI_PARAZ_ll(IINFO_ll) ! +CALL INI_FIELD_LIST(1) +! +CALL INI_FIELD_SCALARS() +! !------------------------------------------------------------------------------- ! ! @@ -176,21 +200,17 @@ YSURF_CUR => YSURF_LIST(1) CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) CALL GOTO_SURFEX(1) ! +TFILE_SURFEX => TZFILE CALL PREP_SURF_MNH(YATMFILE,YATMFILETYPE) +NULLIFY(TFILE_SURFEX) ! !------------------------------------------------------------------------------- ! -CALL FMWRIT(COUTFMFILE,'MASDEV ',CLUOUT0,'--',NMASDEV,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'BUGFIX ',CLUOUT0,'--',NBUGFIX,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'BIBUSER ',CLUOUT0,'--',CBIBUSER,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'PROGRAM ',CLUOUT0,'--',CPROGRAM,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'STORAGE_TYPE',CLUOUT0,'--',CSTORAGE_TYPE,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'MY_NAME ',CLUOUT0,'--',COUTFMFILE,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'DAD_NAME ',CLUOUT0,'--',YDAD,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'SURF ',CLUOUT0,'--','EXTE',0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'L1D ',CLUOUT0,'--',L1D,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'L2D ',CLUOUT0,'--',L2D,0,1,' ',IRESP) -CALL FMWRIT(COUTFMFILE,'PACK ',CLUOUT0,'--',LPACK,0,1,' ',IRESP) +CALL IO_WRITE_HEADER(TZFILE,CLUOUT0) +CALL IO_WRITE_FIELD(TZFILE,'SURF',CLUOUT0,IRESP,'EXTE') +CALL IO_WRITE_FIELD(TZFILE,'L1D', CLUOUT0,IRESP,L1D) +CALL IO_WRITE_FIELD(TZFILE,'L2D', CLUOUT0,IRESP,L2D) +CALL IO_WRITE_FIELD(TZFILE,'PACK',CLUOUT0,IRESP,LPACK) ! !------------------------------------------------------------------------------- WRITE(ILUOUT0,*) ' ' @@ -200,7 +220,7 @@ WRITE(ILUOUT0,*) '| PREP_SURFEX ends correctly |' WRITE(ILUOUT0,*) '| |' WRITE(ILUOUT0,*) '----------------------------------' CALL CLOSE_ll(CLUOUT0, IOSTAT=IRESP) -CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT0,IRESP) +CALL IO_FILE_CLOSE_ll(TZFILE,CLUOUT0,IRESP) ! CALL END_PARA_ll(IINFO_ll) CALL SURFEX_DEALLO_LIST diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index ec451e3bf..0c632e9c2 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -1362,12 +1362,15 @@ END SUBROUTINE WRITE_SURFL0_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY: TFIELDDATA, TYPEDATE USE MODE_FM USE MODE_FMWRIT USE MODE_MSG ! -USE MODD_IO_SURF_MNH, ONLY : COUT, COUTFILE, NLUOUT -USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +USE MODD_IO_ll, ONLY: TFILE_SURFEX +USE MODD_IO_SURF_MNH, ONLY : COUT, COUTFILE, NLUOUT +USE MODD_TYPE_DATE ! ! IMPLICIT NONE @@ -1388,6 +1391,8 @@ CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be written INTEGER, DIMENSION(3) :: ITDATE CHARACTER(LEN=5) :: YMSG +TYPE (DATE_TIME) :: TZDATA +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT0_MNH','writing '//TRIM(HREC)) @@ -1396,26 +1401,25 @@ IF( HREC=='DTCUR' .AND. CSTORAGE_TYPE/='SU' ) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT0_MNH',TRIM(HREC)//' not written in file by externalized surface') RETURN ELSE - - YRECFM=TRIM(HREC)//'%TDATE' -! - ITDATE(1)=KYEAR - ITDATE(2)=KMONTH - ITDATE(3)=KDAY - CALL FMWRIT(COUTFILE,YRECFM,COUT,'--',ITDATE,0,LEN(HCOMMENT),HCOMMENT,KRESP) -! - IF (KRESP /=0) THEN - WRITE ( YMSG, '( I5 )' ) KRESP - CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG) - END IF -! - YRECFM=TRIM(HREC)//'%TIME' - CALL FMWRIT(COUTFILE,YRECFM,COUT,'--',PTIME,0,LEN(HCOMMENT),HCOMMENT,KRESP) + TZDATA%TDATE = DATE(KYEAR,KMONTH,KDAY) + TZDATA%TIME = PTIME + ! + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = TRIM(HCOMMENT) + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEDATE + TZFIELD%NDIMS = 0 + ! + CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,TZDATA) +END IF ! - IF (KRESP /=0) THEN - WRITE ( YMSG, '( I5 )' ) KRESP - CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG) - END IF +IF (KRESP /=0) THEN + WRITE ( YMSG, '( I5 )' ) KRESP + CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG) END IF ! END SUBROUTINE WRITE_SURFT0_MNH diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index 82f6325a2..6b55a0a58 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -59,6 +59,7 @@ USE MODD_DIM_n, ONLY : NIMAX, NJMAX USE MODD_CONF_n, ONLY : CSTORAGE_TYPE ! USE MODE_POS +USE MODE_FM USE MODE_FMWRIT USE MODE_FMREAD USE MODE_IO_ll -- GitLab