From 1d7db45d1a5e0a6ddcbe88c007c3c42bb74134d4 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 22 Mar 2024 09:21:24 +0100
Subject: [PATCH] Philippe 22/03/2024: add LOUT_MAINDOMAIN_WRITE to NAM_OUTPUTn
 to choose to write or not the main domain if there are boxes defined

---
 src/LIB/SURCOUCHE/src/mode_io_field_write.f90   | 10 ++++++----
 src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 |  5 +++++
 src/MNH/modd_bakout.f90                         |  2 ++
 src/MNH/modd_outn.f90                           |  3 +++
 src/MNH/modn_output.f90                         |  4 ++--
 5 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index e32f00474..baa7fcc4f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -3898,7 +3898,7 @@ end subroutine IO_Ndimlist_reduce
 SUBROUTINE IO_Fieldlist_write(TPOUTPUT)
 
 USE MODD_IO,             ONLY: ISP
-USE MODD_OUT_n,          ONLY: NOUT_FIELDLIST, NOUT_NBOXES, TOUT_BOXES
+USE MODD_OUT_n,          ONLY: LOUT_BIGBOX_WRITE, NOUT_FIELDLIST, NOUT_NBOXES, TOUT_BOXES
 USE MODD_PRECISION,      ONLY: CDFINT
 
 USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX
@@ -3915,9 +3915,11 @@ TYPE(TFILEDATA)      :: TZOUTPUT
 !
 IMI = GET_CURRENT_MODEL_INDEX()
 !
-DO JI = 1, SIZE( NOUT_FIELDLIST )
-  CALL IO_Fieldlist_1field_write( TPOUTPUT, IMI, TFIELDLIST(NOUT_FIELDLIST(JI)) )
-END DO
+IF ( LOUT_BIGBOX_WRITE ) THEN
+  DO JI = 1, SIZE( NOUT_FIELDLIST )
+    CALL IO_Fieldlist_1field_write( TPOUTPUT, IMI, TFIELDLIST(NOUT_FIELDLIST(JI)) )
+  END DO
+END IF
 
 ! Treat boxes (subdomains)
 IF ( NOUT_NBOXES > 0 ) THEN
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index e4745932f..2e27e733a 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -742,6 +742,11 @@ SUBROUTINE IO_BOX_PREPARE( KMI )
 
   INTEGER, INTENT(IN) :: KMI
 
+  ! Force the writing of the main domain if there are no boxes
+  ! Remark: default value of LOUT_MAINDOMAIN_WRITE is .FALSE.
+  IF ( NOUT_BOXES(IMI) == 0 ) LOUT_MAINDOMAIN_WRITE(IMI) = .TRUE.
+  OUT_MODEL(IMI)%LOUT_BIGBOX_WRITE = LOUT_MAINDOMAIN_WRITE(IMI)
+
   OUT_MODEL(IMI)%NOUT_NBOXES = NOUT_BOXES(IMI)
   ALLOCATE( OUT_MODEL(IMI)%TOUT_BOXES(NOUT_BOXES(IMI)) )
   TOUT_BOXES => OUT_MODEL(IMI)%TOUT_BOXES
diff --git a/src/MNH/modd_bakout.f90 b/src/MNH/modd_bakout.f90
index 98032cbc2..4fd225d6b 100644
--- a/src/MNH/modd_bakout.f90
+++ b/src/MNH/modd_bakout.f90
@@ -95,6 +95,8 @@ CHARACTER(LEN=NDIRNAMELGTMAX) :: CBAK_DIR='', COUT_DIR=''
 ! Boxes (subdomains) for outputs
 INTEGER, DIMENSION(JPMODELMAX) :: NOUT_BOXES = 0 ! Number of sub-boxes inside each modelgrid
 CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE :: COUT_BOX_NAME ! Names of the boxes
+LOGICAL, DIMENSION(JPMODELMAX) :: LOUT_MAINDOMAIN_WRITE = .FALSE. ! True to write the main domain
+                                                                  ! (automatically forced to .TRUE. if NOUT_BOXES=0)
 
 INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_BOX_IINF ! Box coordinates in physical domain (for each model and for each box)
 INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_BOX_ISUP
diff --git a/src/MNH/modd_outn.f90 b/src/MNH/modd_outn.f90
index 2e3057515..932f5c133 100644
--- a/src/MNH/modd_outn.f90
+++ b/src/MNH/modd_outn.f90
@@ -68,6 +68,7 @@ TYPE OUT_t
   INTEGER, DIMENSION(:), ALLOCATABLE :: NBAK_STEPLIST                  ! List of time steps to do backups (except regular series)
   INTEGER, DIMENSION(:), ALLOCATABLE :: NOUT_STEPLIST                  ! List of time steps to do outputs (except regular series)
   INTEGER, DIMENSION(:), ALLOCATABLE :: NOUT_FIELDLIST                 ! List of fields to write in outputs
+  LOGICAL                            :: LOUT_BIGBOX_WRITE = .TRUE.     ! Write the maix box/domain (if there are boxes)
   TYPE(TOUTBOXMETADATA), DIMENSION(:), ALLOCATABLE :: TOUT_BOXES
 END TYPE OUT_t
 
@@ -84,6 +85,7 @@ INTEGER,               POINTER :: NOUT_STEPFREQFIRST => NULL()
 INTEGER, DIMENSION(:), POINTER :: NBAK_STEPLIST      => NULL()
 INTEGER, DIMENSION(:), POINTER :: NOUT_STEPLIST      => NULL()
 INTEGER, DIMENSION(:), POINTER :: NOUT_FIELDLIST     => NULL()
+LOGICAL,               POINTER :: LOUT_BIGBOX_WRITE  => NULL()
 TYPE(TOUTBOXMETADATA), DIMENSION(:), POINTER :: TOUT_BOXES  => NULL()
 
 CONTAINS
@@ -103,6 +105,7 @@ NOUT_STEPFREQFIRST => OUT_MODEL(KTO)%NOUT_STEPFREQFIRST
 NBAK_STEPLIST      => OUT_MODEL(KTO)%NBAK_STEPLIST
 NOUT_STEPLIST      => OUT_MODEL(KTO)%NOUT_STEPLIST
 NOUT_FIELDLIST     => OUT_MODEL(KTO)%NOUT_FIELDLIST
+LOUT_BIGBOX_WRITE  => OUT_MODEL(KTO)%LOUT_BIGBOX_WRITE
 TOUT_BOXES         => OUT_MODEL(KTO)%TOUT_BOXES
 
 END SUBROUTINE OUT_GOTO_MODEL
diff --git a/src/MNH/modn_output.f90 b/src/MNH/modn_output.f90
index 5766aafd8..1c4cb3149 100644
--- a/src/MNH/modn_output.f90
+++ b/src/MNH/modn_output.f90
@@ -54,8 +54,8 @@ NAMELIST/NAM_OUTPUT/LOUT_BEG,LOUT_END,&
                    LOUT_COMPRESS, NOUT_COMPRESS_LEVEL,&
                    LOUT_COMPRESS_LOSSY, COUT_COMPRESS_LOSSY_ALGO, NOUT_COMPRESS_LOSSY_NSD, &
                    COUT_DIR, &
-                   NOUT_BOXES, COUT_BOX_NAME, NOUT_BOX_IINF, NOUT_BOX_ISUP, NOUT_BOX_JINF, NOUT_BOX_JSUP, &
-                   NOUT_BOX_KINF, NOUT_BOX_KSUP
+                   NOUT_BOXES, COUT_BOX_NAME, LOUT_MAINDOMAIN_WRITE, &
+                   NOUT_BOX_IINF, NOUT_BOX_ISUP, NOUT_BOX_JINF, NOUT_BOX_JSUP, NOUT_BOX_KINF, NOUT_BOX_KSUP
 
 LOGICAL, SAVE, PRIVATE :: LOUTPUT_NML_ALLOCATED = .FALSE.
 
-- 
GitLab