From 94b4ce6866799b2f19146b9f368ca505ddc79b6c Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 6 Sep 2016 10:19:20 +0200
Subject: [PATCH] Philippe 06/09/2016: added XBAK_TIME_FREQ and
 XBAK_TIME_FREQ_FIRST to choose backup frequency in terms of time

---
 src/MNH/modd_fmout.f90 |  4 ++++
 src/MNH/modn_fmout.f90 |  5 ++++-
 src/MNH/set_grid.f90   | 24 +++++++++++++++++++++++-
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/MNH/modd_fmout.f90 b/src/MNH/modd_fmout.f90
index ef8b21840..df8ddd54e 100644
--- a/src/MNH/modd_fmout.f90
+++ b/src/MNH/modd_fmout.f90
@@ -63,6 +63,10 @@ INTEGER,SAVE,DIMENSION(JPMODELMAX) :: NBAK_STEP_FREQ = NNEGUNDEF ! Number
 ! of timesteps between 2 backups for each model
 INTEGER,SAVE,DIMENSION(JPMODELMAX) :: NBAK_STEP_FREQ_FIRST = 1   ! First
 ! timestep numbers between 2 backups for each model (if NBAK_STEP_FREQ is set)
+REAL,SAVE,DIMENSION(JPMODELMAX) :: XBAK_TIME_FREQ = XNEGUNDEF ! Time between
+! 2 backups for each model
+REAL,SAVE,DIMENSION(JPMODELMAX) :: XBAK_TIME_FREQ_FIRST = 0.   ! Time for first
+! backup for each model (if XBAK_TIME_FREQ is set)
 !
 !
 END MODULE MODD_FMOUT
diff --git a/src/MNH/modn_fmout.f90 b/src/MNH/modn_fmout.f90
index 07bd48ca1..eba6b91cc 100644
--- a/src/MNH/modn_fmout.f90
+++ b/src/MNH/modn_fmout.f90
@@ -48,6 +48,9 @@ USE MODD_FMOUT
 !
 IMPLICIT NONE
 !
-NAMELIST/NAM_FMOUT/LBAK_BEG,LBAK_END,XBAK_TIME,NBAK_STEP,NBAK_STEP_FREQ,NBAK_STEP_FREQ_FIRST
+NAMELIST/NAM_FMOUT/LBAK_BEG,LBAK_END,&
+                   XBAK_TIME,NBAK_STEP,&
+                   NBAK_STEP_FREQ,NBAK_STEP_FREQ_FIRST,&
+                   XBAK_TIME_FREQ,XBAK_TIME_FREQ_FIRST
 !
 END MODULE MODN_FMOUT
diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90
index 34c138d0e..564184109 100644
--- a/src/MNH/set_grid.f90
+++ b/src/MNH/set_grid.f90
@@ -528,6 +528,27 @@ DO IMI = 1, NMODEL
   ISTEP_MAX = NINT(XSEGLEN/DYN_MODEL(IMI)%XTSTEP)+1
   IF (IMI == 1) ISTEP_MAX = ISTEP_MAX - ISUP
   !
+  !*       2.3.1a0 Insert regular backups into XBAK_TIME array
+  !
+  IF (XBAK_TIME_FREQ(IMI)>0.) THEN
+    IDX = 1
+    ZOUT = XBAK_TIME_FREQ_FIRST(IMI)
+    ZOUTMAX = PSEGLEN - PTSTEP*ISUP
+    DO WHILE ( ZOUT <= ZOUTMAX )
+      !Find first non 'allocated' element
+      DO WHILE ( XBAK_TIME(IMI,IDX) >= 0. )
+        IDX = IDX + 1
+        IF (IDX > JPOUTMAX) THEN
+          PRINT *,'Error in SET_GRID when treating output list (JPOUTMAX too small)'
+          CALL ABORT
+          STOP
+        END IF
+      END DO
+      XBAK_TIME(IMI,IDX) = ZOUT
+      ZOUT = ZOUT + XBAK_TIME_FREQ(IMI)
+    END DO
+  END IF
+  !
   !*       2.3.1a  Synchronization between nested models through XBAK_TIME arrays (MODD_FMOUT)
   !
   DO JOUT = 1,JPOUTMAX
@@ -699,7 +720,8 @@ DO IMI = 1, NMODEL
   END IF
   IF (NDAD(IMI) == IMI .OR.  IMI == 1) THEN
     OUT_MODEL(IMI)%TOUTBAKN(:)%NOUTDAD = 0
-    OUT_MODEL(IMI)%TOUTBAKN(IPOS)%CDADFILENAME = OUT_MODEL(IMI)%TOUTBAKN(IPOS)%CFILENAME
+    !Check IPOS>0 because TOUTBAKN(0) does not exist (IPOS=0 only if no backups)
+    IF(IPOS>0) OUT_MODEL(IMI)%TOUTBAKN(IPOS)%CDADFILENAME = OUT_MODEL(IMI)%TOUTBAKN(IPOS)%CFILENAME
   ELSE
     DO IPOS = 1,OUT_MODEL(IMI)%NOUT_NUMB
       IDX = 0
-- 
GitLab