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