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