From 6580e5a7096560056c297455cbc38ce11ab92801 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 8 Mar 2018 10:33:32 +0100 Subject: [PATCH] Philippe 08/03/2018: lfi2cdf: add HPROGRAM_ORIG optional argument to IO_WRITE_COORDVAR_NC4 --- src/LIB/SURCOUCHE/src/mode_fm.f90 | 12 +++++++----- src/LIB/SURCOUCHE/src/mode_io.f90 | 6 ++++-- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 20 ++++++++++++++------ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index d381a8328..46563b0bd 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -51,7 +51,7 @@ IF ( IP .EQ. 1 ) PRINT *,'INIT L1D,L2D,LPACK = ',L1D,L2D,LPACK END SUBROUTINE SET_FMPACK_ll -SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO,HPOSITION,HSTATUS) +SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO,HPOSITION,HSTATUS,HPROGRAM_ORIG) ! USE MODD_CONF, ONLY: CPROGRAM, NMNHVERSION USE MODD_IO_ll, ONLY: LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA @@ -65,6 +65,7 @@ INTEGER, INTENT(OUT), OPTIONAL :: KRESP ! Return code LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HPOSITION CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HSTATUS +CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program ! INTEGER :: IRESP,IRESP2 INTEGER :: IMASDEV,IBUGFIX @@ -158,7 +159,7 @@ SELECT CASE(TPFILE%CTYPE) TZFILE_DES%NOPEN = TZFILE_DES%NOPEN + 1 ENDIF ! - CALL FMOPEN_ll(TPFILE,IRESP,OPARALLELIO=OPARALLELIO) + CALL FMOPEN_ll(TPFILE,IRESP,OPARALLELIO=OPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG) ! !Compare MNHVERSION of file with current version IF (TRIM(TPFILE%CMODE) == 'READ') THEN @@ -224,7 +225,7 @@ IF (PRESENT(KRESP)) KRESP = IRESP ! END SUBROUTINE IO_FILE_OPEN_ll -SUBROUTINE FMOPEN_ll(TPFILE,KRESP,OPARALLELIO) +SUBROUTINE FMOPEN_ll(TPFILE,KRESP,OPARALLELIO,HPROGRAM_ORIG) USE MODD_IO_ll, ONLY : ISTDOUT,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA USE MODE_IO_ll, ONLY : OPEN_ll,GCONFIO !JUANZ @@ -237,6 +238,7 @@ USE MODE_NETCDF TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure INTEGER, INTENT(OUT) :: KRESP ! return-code LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO +CHARACTER(LEN=*),INTENT(IN), OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program ! ! Local variables ! @@ -312,7 +314,7 @@ ENDIF INB_PROCIO = NB_PROCIO_W END SELECT CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',IOSTAT=IRESP, & - KNB_PROCIO=INB_PROCIO,KMELEV=IMELEV,OPARALLELIO=GPARALLELIO) + KNB_PROCIO=INB_PROCIO,KMELEV=IMELEV,OPARALLELIO=GPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG) IF (IRESP /= 0) GOTO 1000 @@ -388,7 +390,7 @@ END IF #if defined(MNH_IOCDF4) !Write coordinates variables in NetCDF file IF (LIOCDF4 .AND.YACTION == 'WRITE') THEN - CALL IO_WRITE_COORDVAR_NC4(TPFILE) + CALL IO_WRITE_COORDVAR_NC4(TPFILE,HPROGRAM_ORIG=HPROGRAM_ORIG) END IF #endif ! Broadcast ERROR diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index e6a938507..f9f728894 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -210,7 +210,8 @@ CONTAINS PAD, & KNB_PROCIO,& KMELEV,& - OPARALLELIO) + OPARALLELIO, & + HPROGRAM_ORIG) #if defined(MNH_IOCDF4) USE MODD_NETCDF, ONLY:IDCDF_KIND USE MODE_NETCDF @@ -233,6 +234,7 @@ CONTAINS INTEGER, INTENT(IN), OPTIONAL :: KNB_PROCIO INTEGER(KIND=LFI_INT), INTENT(IN), OPTIONAL :: KMELEV LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO + CHARACTER(LEN=*),INTENT(IN), OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program ! ! local var ! @@ -715,7 +717,7 @@ CONTAINS #if defined(MNH_IOCDF4) !Write coordinates variables in NetCDF file IF (LIOCDF4 .AND.YACTION == 'WRITE') THEN - CALL IO_WRITE_COORDVAR_NC4(TZSPLITFILE) + CALL IO_WRITE_COORDVAR_NC4(TZSPLITFILE,HPROGRAM_ORIG=HPROGRAM_ORIG) END IF #endif ! diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 4e75349f0..fa072c285 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -180,7 +180,7 @@ NCOORDID(3,8) = PIOCDF%DIM_LEVEL_W END SUBROUTINE IO_SET_KNOWNDIMS_NC4 -SUBROUTINE IO_WRITE_COORDVAR_NC4(TPFILE) +SUBROUTINE IO_WRITE_COORDVAR_NC4(TPFILE,HPROGRAM_ORIG) USE MODD_CONF, ONLY: CPROGRAM, LCARTESIAN USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_GRID, ONLY: XLATORI, XLONORI @@ -190,9 +190,11 @@ USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODE_FIELD, ONLY: TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME USE MODE_GRIDPROJ -TYPE(TFILEDATA),INTENT(IN) :: TPFILE +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: HPROGRAM_ORIG !To emulate a file coming from this program CHARACTER(LEN=:),ALLOCATABLE :: YSTDNAMEPREFIX +CHARACTER(LEN=:),ALLOCATABLE :: YPROGRAM INTEGER :: IIU, IJU, IKU INTEGER :: ID, IRESP INTEGER(KIND=IDCDF_KIND) :: INCID @@ -204,11 +206,17 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_COORDVAR_NC4','called for'//TRIM(TPFIL PIOCDF => TPFILE%TNCDIMS +IF (PRESENT(HPROGRAM_ORIG)) THEN + YPROGRAM = HPROGRAM_ORIG +ELSE + YPROGRAM = CPROGRAM +ENDIF + ! Get the Netcdf file ID INCID = TPFILE%NNCID -IF ( TRIM(CPROGRAM)/='PGD' & - .AND. .NOT.(TRIM(CPROGRAM)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX +IF ( TRIM(YPROGRAM)/='PGD' & + .AND. .NOT.(TRIM(YPROGRAM)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX IIU = SIZE(XXHAT) IJU = SIZE(XYHAT) ALLOCATE(ZXHATM(IIU),ZYHATM(IJU)) @@ -265,8 +273,8 @@ ELSE ENDIF ! IF (TPFILE%LMASTER) THEN !vertical coordinates in the transformed space are the same on all processes - IF (TRIM(CPROGRAM)/='PGD' .AND. TRIM(CPROGRAM)/='NESPGD' & - .AND. .NOT.(TRIM(CPROGRAM)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX + IF (TRIM(YPROGRAM)/='PGD' .AND. TRIM(YPROGRAM)/='NESPGD' & + .AND. .NOT.(TRIM(YPROGRAM)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX ! IKU = SIZE(XZHAT) ALLOCATE(ZZHATM(IKU)) -- GitLab