From 4ddf6158f750fd84d9cc5ad228bef2068775d997 Mon Sep 17 00:00:00 2001
From: Gaelle DELAUTIER <gaelle.delautier@meteo.fr>
Date: Thu, 26 Apr 2018 11:12:43 +0200
Subject: [PATCH] Juan + Gaelle 26/04/2018 : bug IO

---
 LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90 |  1 +
 src/LIB/SURCOUCHE/src/mode_field.f90   | 18 +++++++++++++++++-
 src/LIB/SURCOUCHE/src/mode_netcdf.f90  |  6 ++++--
 src/MNH/prep_ideal_case.f90            |  7 ++++++-
 src/SURFEX/sfx_xios_check_field.F90    | 15 +++++++++++++++
 5 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90 b/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
index 544a2bfee..44354d56b 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
@@ -16,6 +16,7 @@ program LFI2CDF
   USE mode_options
   USE MODE_SPLITTINGZ_ll, ONLY: INI_PARAZ_ll
   USE mode_util
+  USE MODI_VERSION
 
   USE MODN_CONFIO, ONLY: LCDF4, LLFIOUT, LLFIREAD
 
diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 1de66f637..962c74684 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -119,7 +119,9 @@ TYPE(TFIELDDATA),DIMENSION(MAXFIELDS),SAVE :: TFIELDLIST
 CONTAINS
 !
 SUBROUTINE INI_FIELD_LIST(KMODEL)
-!
+! Modif
+!  J.Escobar 25/04/2018: missing def of FRC
+!------------------------------------------------
 USE MODD_CONF, ONLY: NMODEL
 !
 INTEGER,INTENT(IN),OPTIONAL :: KMODEL
@@ -3249,6 +3251,20 @@ TFIELDLIST(IDX)%LTIMEDEP   = .TRUE.
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'FRC'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'FRC'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Number of forcing profiles'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+TFIELDLIST(IDX)%LTIMEDEP   = .FALSE.
+IDX = IDX+1
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !
 IF (TRIM(CPROGRAM)=='REAL' .OR. TRIM(CPROGRAM) == 'LFICDF') THEN
 !PW: not yet known: IF (LFILTERING) THEN
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 3ef456772..5af85e8d1 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -2184,7 +2184,9 @@ KRESP = IRESP
 END SUBROUTINE IO_WRITE_FIELD_NC4_C0
 
 SUBROUTINE IO_WRITE_FIELD_NC4_C1(TPFILE,TPFIELD,HFIELD,KRESP)
-!
+!  Modif
+!    J.Escobar : 25/04/2018 : missing 'IF ALLOCATED(IVDIMSTMP)' DEALLOCATE
+!----------------------------------------------------------------
 TYPE(TFILEDATA),              INTENT(IN)  :: TPFILE
 TYPE(TFIELDDATA),             INTENT(IN)  :: TPFIELD
 CHARACTER(LEN=*),DIMENSION(:),INTENT(IN)  :: HFIELD
@@ -2244,7 +2246,7 @@ CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
 STATUS = NF90_PUT_VAR(INCID, IVARID, HFIELD(1:ISIZE)(1:ILEN), START=(/IONE,IONE/), COUNT=(/ILEN,ISIZE/))
 IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
 
-DEALLOCATE(IVDIMSTMP)
+IF(ALLOCATED(IVDIMSTMP)) DEALLOCATE(IVDIMSTMP)
 
 KRESP = IRESP
 END SUBROUTINE IO_WRITE_FIELD_NC4_C1
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 3bb3639a2..0ddb6828d 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -1775,6 +1775,7 @@ IF (CSURF =='EXTE') THEN
     TPGDFILE => TINIFILE
     CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.,HDIR='-')
     CALL PGD_SURF_ATM     (YSURF_CUR,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.)
+    CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
     TPGDFILE => TINIFILEPGD
   ELSE
   ! ... or read from file.
@@ -1794,7 +1795,11 @@ IF (CSURF =='EXTE') THEN
     !* writing of physiographic fields in the file
     CSTORAGE_TYPE='PG'
     !
-    CALL IO_FILE_ADD2LIST(TZINIFILEPGD,TRIM(CINIFILEPGD),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
+    IF (ASSOCIATED(TINIFILEPGD)) THEN
+       TZINIFILEPGD => TINIFILEPGD
+    ELSE
+       CALL IO_FILE_ADD2LIST(TZINIFILEPGD,TRIM(CINIFILEPGD),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
+    END IF
     !
     CALL IO_FILE_OPEN_ll(TZINIFILEPGD)
     !
diff --git a/src/SURFEX/sfx_xios_check_field.F90 b/src/SURFEX/sfx_xios_check_field.F90
index 3eab1eee3..839a0c784 100644
--- a/src/SURFEX/sfx_xios_check_field.F90
+++ b/src/SURFEX/sfx_xios_check_field.F90
@@ -2,6 +2,21 @@
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !SFX_LIC for details. version 1.
+MODULE MODI_SFX_XIOS_CHECK_FIELD
+INTERFACE
+SUBROUTINE SFX_XIOS_CHECK_FIELD(U, HREC, HCOMMENT, OWRITE, PFIELD1, PFIELD2, PFIELD3, HAXIS)
+USE MODD_SURF_ATM_n, ONLY     : SURF_ATM_t
+TYPE(SURF_ATM_t)  , INTENT(INOUT) :: U
+CHARACTER(LEN=*)      ,INTENT(IN) :: HREC     ! name of the field to check
+CHARACTER(LEN=100)    ,INTENT(IN) :: HCOMMENT ! Comment string
+LOGICAL               ,INTENT(OUT):: OWRITE   ! TRUE if no issue re. Xios for this field
+REAL,DIMENSION(:)     ,INTENT(IN) , OPTIONAL :: PFIELD1  ! value
+REAL,DIMENSION(:,:)   ,INTENT(IN) , OPTIONAL :: PFIELD2  ! value
+REAL,DIMENSION(:,:,:) ,INTENT(IN) , OPTIONAL :: PFIELD3  ! value
+CHARACTER(LEN=*)      ,INTENT(IN) , OPTIONAL :: HAXIS    ! name of the additional axis
+END SUBROUTINE SFX_XIOS_CHECK_FIELD
+END INTERFACE
+END MODULE MODI_SFX_XIOS_CHECK_FIELD
 SUBROUTINE SFX_XIOS_CHECK_FIELD(U, HREC, HCOMMENT, OWRITE, PFIELD1, PFIELD2, PFIELD3, HAXIS)
 !!
 !!
-- 
GitLab