From 3b86c439ee79dd06211434788c140651a98d7851 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 8 Jan 2018 15:37:10 +0100
Subject: [PATCH] Philippe 08/01/2018: IO: move NF90_CLOSE outside of
 CLEANIOCDF

---
 src/LIB/SURCOUCHE/src/mode_fm.f90     | 11 ++++++++++-
 src/LIB/SURCOUCHE/src/mode_io.f90     | 11 ++++++++++-
 src/LIB/SURCOUCHE/src/mode_netcdf.f90 |  8 +-------
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index d37ce4b88..2a7d97bd0 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -609,7 +609,16 @@ IF (TPFILE%LMASTER) THEN
      CALL LFIFER(IRESP8,TPFILE%NLFIFLU,YSTATU)
      IRESP = IRESP8
   END IF
-  IF (ASSOCIATED(TPFILE%TNCDIMS)) CALL CLEANIOCDF(TPFILE%TNCDIMS)
+#if defined(MNH_IOCDF4)
+  IF (TPFILE%NNCID/=-1) THEN
+    ! Close Netcdf File
+    IRESP = NF90_CLOSE(TPFILE%NNCID)
+    IF (IRESP /= NF90_NOERR) THEN
+      CALL PRINT_MSG(NVERB_WARNING,'IO','FMCLOS_ll','NF90_CLOSE error: '//TRIM(NF90_STRERROR(IRESP)))
+    END IF
+    IF (ASSOCIATED(TPFILE%TNCDIMS)) CALL CLEANIOCDF(TPFILE%TNCDIMS)
+  END IF
+#endif
   IF (IRESP == 0) THEN
     !! Write in pipe
 #if defined(MNH_LINUX) || defined(MNH_SP4)
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 9cb6bee5a..8c2d65a50 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -786,7 +786,16 @@ CONTAINS
             CALL IOFREEFLU(INT(TPFILE%NLFIFLU))
             IRESP2 = IRESP8
           END IF
-          IF (ASSOCIATED(TZFILE%TNCDIMS)) CALL CLEANIOCDF(TZFILE%TNCDIMS)
+#if defined(MNH_IOCDF4)
+          IF (TZFILE%NNCID/=-1) THEN
+            ! Close Netcdf File
+            IRESP = NF90_CLOSE(TZFILE%NNCID)
+            IF (IRESP /= NF90_NOERR) THEN
+              CALL PRINT_MSG(NVERB_WARNING,'IO','CLOSE_ll','NF90_CLOSE error: '//TRIM(NF90_STRERROR(IRESP)))
+            END IF
+            IF (ASSOCIATED(TZFILE%TNCDIMS)) CALL CLEANIOCDF(TZFILE%TNCDIMS)
+          END IF
+#endif
         END IF
       END DO
       !
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 86805e939..61b4ce68b 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -47,7 +47,7 @@ INTERFACE IO_READ_FIELD_NC4
 END INTERFACE IO_READ_FIELD_NC4
 
 ! Public from module netcdf
-PUBLIC NF90_OPEN,NF90_CREATE,NF90_NOWRITE,NF90_CLOBBER,NF90_NETCDF4,NF90_NOERR,NF90_STRERROR
+PUBLIC NF90_CLOSE,NF90_OPEN,NF90_CREATE,NF90_NOWRITE,NF90_CLOBBER,NF90_NETCDF4,NF90_NOERR,NF90_STRERROR
 ! Public from this module :
 PUBLIC NEWIOCDF,CLEANIOCDF,IO_WRITE_FIELD_NC4,IO_READ_FIELD_NC4,IO_WRITE_HEADER_NC4
 
@@ -92,12 +92,6 @@ INTEGER(KIND=IDCDF_KIND) :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','CLEANIOCDF','called')
 
-! Close Netcdf File
-IRESP = NF90_CLOSE(PIOCDF%NCID)
-IF (IRESP /= NF90_NOERR) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','CLEANIOCDF','NF90_CLOSE error: '//TRIM(NF90_STRERROR(IRESP)))
-END IF
-
 ! Clean DIMLIST and DIMSTR
 CALL CLEANLIST(PIOCDF%DIMLIST)
 CALL CLEANLIST(PIOCDF%DIMSTR)
-- 
GitLab