From 3039dc01fd9d220ff9e858f4a2aeccd31d6cc07d Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 5 Sep 2019 14:54:51 +0200
Subject: [PATCH] Philippe 05/09/2019: IO: Z-split files: to prevent
 serialization between files, nmnhversion is taken from the main file

---
 src/LIB/SURCOUCHE/src/mode_io_tools.f90 | 104 +++++++++++++-----------
 1 file changed, 56 insertions(+), 48 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
index b4d2a3d5f..425cc472a 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
@@ -7,6 +7,8 @@
 !  P. Wautelet 13/12/2018: extracted from mode_io.f90
 !  P. Wautelet 14/12/2018: added IO_Filename_construct
 !  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!  P. Wautelet 05/09/2019: IO_Mnhversion_get: Z-split files: to prevent serialization between files,
+!                          nmnhversion is taken from the main file
 !-----------------------------------------------------------------
 module mode_io_tools
 
@@ -117,58 +119,59 @@ subroutine IO_Mnhversion_get(tpfile)
   if ( trim(tpfile%cmode) /= 'READ' ) &
     call print_msg(NVERB_FATAL,'IO','IO_Mnhversion_get',trim(tpfile%cname)// 'not opened in read mode')
 
-  imnhversion(:) = 0
-  !use tzfield because tfieldlist could be not initialised
-  tzfield%cmnhname   = 'MNHVERSION'
-  tzfield%cstdname   = ''
-  tzfield%clongname  = 'MesoNH version'
-  tzfield%cunits     = ''
-  tzfield%cdir       = '--'
-  tzfield%ccomment   = ''
-  tzfield%ngrid      = 0
-  tzfield%ntype      = TYPEINT
-  tzfield%ndims      = 1
-  tzfield%ltimedep   = .false.
-  call IO_Field_read(tpfile,tzfield,imnhversion,iresp)
-  if (iresp/=0) then
-    tzfield%cmnhname   = 'MASDEV'
-    tzfield%clongname  = 'MesoNH version (without bugfix)'
-    tzfield%ndims      = 0
-    call IO_Field_read(tpfile,tzfield,imasdev,iresp)
+  if ( .not. associated( tpfile%tmainfile ) ) then
+    imnhversion(:) = 0
+    !use tzfield because tfieldlist could be not initialised
+    tzfield%cmnhname   = 'MNHVERSION'
+    tzfield%cstdname   = ''
+    tzfield%clongname  = 'MesoNH version'
+    tzfield%cunits     = ''
+    tzfield%cdir       = '--'
+    tzfield%ccomment   = ''
+    tzfield%ngrid      = 0
+    tzfield%ntype      = TYPEINT
+    tzfield%ndims      = 1
+    tzfield%ltimedep   = .false.
+    call IO_Field_read(tpfile,tzfield,imnhversion,iresp)
     if (iresp/=0) then
-      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown MASDEV version for '//trim(tpfile%cname))
-    else
-      if (imasdev<100) then
-        imnhversion(1)=imasdev/10
-        imnhversion(2)=mod(imasdev,10)
-      else !for example for mnh 4.10
-        imnhversion(1)=imasdev/100
-        imnhversion(2)=mod(imasdev,100)
+      tzfield%cmnhname   = 'MASDEV'
+      tzfield%clongname  = 'MesoNH version (without bugfix)'
+      tzfield%ndims      = 0
+      call IO_Field_read(tpfile,tzfield,imasdev,iresp)
+      if (iresp/=0) then
+        call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown MASDEV version for '//trim(tpfile%cname))
+      else
+        if (imasdev<100) then
+          imnhversion(1)=imasdev/10
+          imnhversion(2)=mod(imasdev,10)
+        else !for example for mnh 4.10
+          imnhversion(1)=imasdev/100
+          imnhversion(2)=mod(imasdev,100)
+        end if
+      end if
+      !
+      tzfield%cmnhname   = 'BUGFIX'
+      tzfield%clongname  = 'MesoNH bugfix number'
+      call IO_Field_read(tpfile,tzfield,ibugfix,iresp)
+      if (iresp/=0) then
+        call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown BUGFIX version for '//trim(tpfile%cname))
+      else
+        imnhversion(3)=ibugfix
       end if
     end if
     !
-    tzfield%cmnhname   = 'BUGFIX'
-    tzfield%clongname  = 'MesoNH bugfix number'
-    call IO_Field_read(tpfile,tzfield,ibugfix,iresp)
-    if (iresp/=0) then
-      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown BUGFIX version for '//trim(tpfile%cname))
-    else
-      imnhversion(3)=ibugfix
-    end if
-  end if
-  !
-  write(ymnhversion_file,"( I0,'.',I0,'.',I0 )" ) imnhversion(1),imnhversion(2),imnhversion(3)
-  write(ymnhversion_curr,"( I0,'.',I0,'.',I0 )" ) nmnhversion(1),nmnhversion(2),nmnhversion(3)
-  !
-  if ( imnhversion(1)==0 .and. imnhversion(2)==0 .and. imnhversion(3)==0 ) then
-    call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
-                  ' was written with an unknown version of MesoNH')
+    write(ymnhversion_file,"( I0,'.',I0,'.',I0 )" ) imnhversion(1),imnhversion(2),imnhversion(3)
+    write(ymnhversion_curr,"( I0,'.',I0,'.',I0 )" ) nmnhversion(1),nmnhversion(2),nmnhversion(3)
+    !
+    if ( imnhversion(1)==0 .and. imnhversion(2)==0 .and. imnhversion(3)==0 ) then
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with an unknown version of MesoNH')
     else if (  imnhversion(1)< nmnhversion(1) .or. &
-            (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)< nmnhversion(2)) .or. &
-            (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)<nmnhversion(3)) ) then
-    call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
-                    ' was written with an older version of MesoNH ('//trim(ymnhversion_file)//&
-                    ' instead of '//trim(ymnhversion_curr)//')')
+              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)< nmnhversion(2)) .or. &
+              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)<nmnhversion(3)) ) then
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                      ' was written with an older version of MesoNH ('//trim(ymnhversion_file)//&
+                      ' instead of '//trim(ymnhversion_curr)//')')
     else if (  imnhversion(1)> nmnhversion(1) .or. &
               (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)> nmnhversion(2)) .or. &
               (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)>nmnhversion(3)) ) then
@@ -177,10 +180,15 @@ subroutine IO_Mnhversion_get(tpfile)
                     ' instead of '//trim(ymnhversion_curr)//')')
     else
       call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
-                    ' was written with the same version of MesoNH ('//trim(ymnhversion_curr)//')')
+                      ' was written with the same version of MesoNH ('//trim(ymnhversion_curr)//')')
     end if
     !
     tpfile%nmnhversion(:) = imnhversion(:)
+  else ! associated( tpfile%tmainfile )
+    if ( .not. tpfile%tmainfile%lopened ) &
+      call Print_msg( NVERB_FATAL, 'IO', 'IO_Mnhversion_get', 'tmainfile should be opened' )
+    tpfile%nmnhversion(:) = tpfile%tmainfile%nmnhversion(:)
+  end if
 end subroutine IO_Mnhversion_get
 
 
-- 
GitLab