From 2c211bda1908ce35e9a66c95fa627189657f00eb Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 7 Mar 2024 11:01:51 +0100 Subject: [PATCH] Philippe 07/03/2024: move allocation/deallocation of variables used in NAM_BACKUP and NAM_OUTPUT in dedicated subroutines --- .../SURCOUCHE/src/mode_io_manage_struct.f90 | 10 ++--- src/MNH/modn_backup.f90 | 33 ++++++++++++-- src/MNH/modn_output.f90 | 35 ++++++++++++++- src/MNH/read_desfmn.f90 | 44 ++----------------- src/MNH/read_exsegn.f90 | 44 ++----------------- 5 files changed, 77 insertions(+), 89 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index af9abb459..cf21d21c4 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 6dca60a3f..d1ec3226f 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 64429041d..df3fc7f41 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 c28f702ca..64049e925 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 4fc0ef4ee..6e6c12581 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 ) -- GitLab