diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index af9abb4598831a05630e9f5c72c7f95621a684d8..cf21d21c4de1a4a0cf35a96e227d98cb265c22f9 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -66,6 +66,9 @@ USE MODD_VAR_ll, ONLY: IP use mode_field, only: Find_field_id_from_mnhname +USE MODN_BACKUP, ONLY: BACKUP_NML_DEALLOCATE +USE MODN_OUTPUT, ONLY: OUTPUT_NML_DEALLOCATE + IMPLICIT NONE ! INTEGER, INTENT(IN) :: KSUP ! supp. time steps @@ -582,11 +585,8 @@ DO IMI = 1, NMODEL ! END DO ! IMI=1,NMODEL ! -DEALLOCATE(NBAK_STEP) -DEALLOCATE(NOUT_STEP) -DEALLOCATE(XBAK_TIME) -DEALLOCATE(XOUT_TIME) -DEALLOCATE(COUT_VAR) +CALL BACKUP_NML_DEALLOCATE() +CALL OUTPUT_NML_DEALLOCATE() ! ! Set/initialize the pointers (necessary to use them now without OUT_MODEL(1)%...) CALL OUT_GOTO_MODEL( 1, 1 ) diff --git a/src/MNH/modn_backup.f90 b/src/MNH/modn_backup.f90 index 6dca60a3f305293bec0d9c5f14adba9e3c3c1d31..d1ec3226f0bfc56ea3059e086c17e7695fe39453 100644 --- a/src/MNH/modn_backup.f90 +++ b/src/MNH/modn_backup.f90 @@ -1,17 +1,17 @@ !MNH_LIC Copyright 1996-2024 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ################## MODULE MODN_BACKUP ! ################## ! -!!**** *MODN_BACKUP* - declaration of namelist NAM_OUTPUT +!!**** *MODN_BACKUP* - declaration of namelist NAM_BACKUP !! !! PURPOSE !! ------- -! The purpose of this module is to specify the namelist NAM_OUTPUT +! The purpose of this module is to specify the namelist NAM_BACKUP ! which concerns the instants and some parameters (compression and precision reduction) ! of the backups realized by all models. ! @@ -51,4 +51,31 @@ NAMELIST/NAM_BACKUP/LBAK_BEG,LBAK_END,& LBAK_COMPRESS, NBAK_COMPRESS_LEVEL, & CBAK_DIR ! +CONTAINS + +SUBROUTINE BACKUP_NML_ALLOCATE( ) + USE MODD_CONF, ONLY: NMODEL + USE MODD_IO, ONLY: NFILE_NUM_MAX + USE MODD_PARAMETERS, ONLY: NNEGUNDEF, XNEGUNDEF + + IF ( .NOT.ALLOCATED(XBAK_TIME) ) THEN + ALLOCATE( XBAK_TIME(NMODEL, NFILE_NUM_MAX) ) + XBAK_TIME(:,:) = XNEGUNDEF + END IF + + IF ( .NOT.ALLOCATED(NBAK_STEP) ) THEN + ALLOCATE( NBAK_STEP(NMODEL, NFILE_NUM_MAX) ) + NBAK_STEP(:,:) = NNEGUNDEF + END IF + +END SUBROUTINE BACKUP_NML_ALLOCATE + + +SUBROUTINE BACKUP_NML_DEALLOCATE( ) + + DEALLOCATE( XBAK_TIME ) + DEALLOCATE( NBAK_STEP ) + +END SUBROUTINE BACKUP_NML_DEALLOCATE + END MODULE MODN_BACKUP diff --git a/src/MNH/modn_output.f90 b/src/MNH/modn_output.f90 index 64429041d9ca7aa91ec9767e7ef55c72663f731a..df3fc7f410a4b1e30d1d9ef490f35011928424b8 100644 --- a/src/MNH/modn_output.f90 +++ b/src/MNH/modn_output.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1996-2023 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-2024 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -54,4 +54,37 @@ NAMELIST/NAM_OUTPUT/LOUT_BEG,LOUT_END,& LOUT_COMPRESS_LOSSY, COUT_COMPRESS_LOSSY_ALGO, NOUT_COMPRESS_LOSSY_NSD, & COUT_DIR ! +CONTAINS + +SUBROUTINE OUTPUT_NML_ALLOCATE( ) + USE MODD_CONF, ONLY: NMODEL + USE MODD_IO, ONLY: NFILE_NUM_MAX + USE MODD_PARAMETERS, ONLY: NNEGUNDEF, XNEGUNDEF + + IF ( .NOT.ALLOCATED(XOUT_TIME) ) THEN + ALLOCATE( XOUT_TIME(NMODEL, NFILE_NUM_MAX) ) + XOUT_TIME(:,:) = XNEGUNDEF + END IF + + IF ( .NOT.ALLOCATED(NOUT_STEP) ) THEN + ALLOCATE( NOUT_STEP(NMODEL, NFILE_NUM_MAX) ) + NOUT_STEP(:,:) = NNEGUNDEF + END IF + + IF ( .NOT.ALLOCATED(COUT_VAR) ) THEN + ALLOCATE( COUT_VAR(NMODEL, JPOUTVARMAX) ) + COUT_VAR(:,:) = '' + END IF + +END SUBROUTINE OUTPUT_NML_ALLOCATE + + +SUBROUTINE OUTPUT_NML_DEALLOCATE( ) + + DEALLOCATE( XOUT_TIME ) + DEALLOCATE( NOUT_STEP ) + DEALLOCATE( COUT_VAR ) + +END SUBROUTINE OUTPUT_NML_DEALLOCATE + END MODULE MODN_OUTPUT diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90 index c28f702cae40a0dc93d727f82f3706b6083df583..64049e92578cc549c553d70d53506c7017b591c3 100644 --- a/src/MNH/read_desfmn.f90 +++ b/src/MNH/read_desfmn.f90 @@ -500,26 +500,8 @@ IF (KMI == 1) THEN IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_NESTING) CALL POSNAM( TZDESFILE, 'NAM_BACKUP', GFOUND ) IF (GFOUND) THEN - IF (.NOT.ALLOCATED(XBAK_TIME)) THEN - ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX)) - XBAK_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(XOUT_TIME)) THEN - ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *OUT* variables to prevent - XOUT_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NBAK_STEP)) THEN - ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX)) - NBAK_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NOUT_STEP)) THEN - ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_OUTPUT does not exist - NOUT_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(COUT_VAR)) THEN - ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX)) - COUT_VAR(:,:) = '' - END IF + CALL BACKUP_NML_ALLOCATE() + CALL OUTPUT_NML_ALLOCATE() !Allocate *OUT* variables to prevent problems if NAM_OUTPUT does not exist READ(UNIT=ILUDES,NML=NAM_BACKUP) ELSE CALL POSNAM( TZDESFILE, 'NAM_FMOUT', GFOUND ) @@ -527,26 +509,8 @@ IF (KMI == 1) THEN END IF CALL POSNAM( TZDESFILE, 'NAM_OUTPUT', GFOUND ) IF (GFOUND) THEN - IF (.NOT.ALLOCATED(XBAK_TIME)) THEN - ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *BAK* variables to prevent - XBAK_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(XOUT_TIME)) THEN - ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX)) - XOUT_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NBAK_STEP)) THEN - ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_BACKUP does not exist - NBAK_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NOUT_STEP)) THEN - ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX)) - NOUT_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(COUT_VAR)) THEN - ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX)) - COUT_VAR(:,:) = '' - END IF + CALL BACKUP_NML_ALLOCATE() !Allocate *BAK* variables to prevent problems if NAM_BACKUP does not exist + CALL OUTPUT_NML_ALLOCATE() READ(UNIT=ILUDES,NML=NAM_OUTPUT) END IF ! Note: it is not useful to read the budget namelists in the .des files diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 4fc0ef4ee94eafd4e6b33202ca56c2bb89b3bb80..6e6c12581996622f14e0664b3dd5d2e1b796475c 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -599,26 +599,8 @@ IF (KMI == 1) THEN CALL POSNAM( TPEXSEGFILE, 'NAM_BACKUP', GFOUND ) IF (GFOUND) THEN !Should have been allocated before in READ_DESFM_n - IF (.NOT.ALLOCATED(XBAK_TIME)) THEN - ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX)) - XBAK_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(XOUT_TIME)) THEN - ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *OUT* variables to prevent - XOUT_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NBAK_STEP)) THEN - ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX)) - NBAK_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NOUT_STEP)) THEN - ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_OUTPUT does not exist - NOUT_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(COUT_VAR)) THEN - ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX)) - COUT_VAR(:,:) = '' - END IF + CALL BACKUP_NML_ALLOCATE() + CALL OUTPUT_NML_ALLOCATE() !Allocate *OUT* variables to prevent problems if NAM_OUTPUT does not exist READ(UNIT=ILUSEG,NML=NAM_BACKUP) ELSE CALL POSNAM( TPEXSEGFILE, 'NAM_FMOUT', GFOUND ) @@ -631,26 +613,8 @@ IF (KMI == 1) THEN CALL POSNAM( TPEXSEGFILE, 'NAM_OUTPUT', GFOUND ) IF (GFOUND) THEN !Should have been allocated before in READ_DESFM_n - IF (.NOT.ALLOCATED(XBAK_TIME)) THEN - ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *BAK* variables to prevent - XBAK_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(XOUT_TIME)) THEN - ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX)) - XOUT_TIME(:,:) = XNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NBAK_STEP)) THEN - ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_BACKUP does not exist - NBAK_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(NOUT_STEP)) THEN - ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX)) - NOUT_STEP(:,:) = NNEGUNDEF - END IF - IF (.NOT.ALLOCATED(COUT_VAR)) THEN - ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX)) - COUT_VAR(:,:) = '' - END IF + CALL BACKUP_NML_ALLOCATE() !Allocate *BAK* variables to prevent problems if NAM_BACKUP does not exist + CALL OUTPUT_NML_ALLOCATE() READ(UNIT=ILUSEG,NML=NAM_OUTPUT) END IF CALL POSNAM( TPEXSEGFILE, 'NAM_BUDGET', GFOUND )