From 352773749d32e0a37eaddf99ded21b14595311b5 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 18 Jan 2023 14:33:49 +0100 Subject: [PATCH] Philippe 18/01/2023: bugfix: close backup files in the correct order for the first temporal iteration This solves crash in case of model restart with balloons --- src/MNH/mesonh.f90 | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90 index a6053e6e9..ad132c941 100644 --- a/src/MNH/mesonh.f90 +++ b/src/MNH/mesonh.f90 @@ -120,13 +120,17 @@ IMPLICIT NONE ! !* 0.1 declarations of local variables ! +TYPE TFILEPTR + TYPE(TFILEDATA), POINTER :: TPFILE +END TYPE TFILEPTR +! INTEGER :: JMODEL ! loop index INTEGER :: ITEMP_MODEL1 ! loop increment -LOGICAL :: GEXIT ! flag for the end of the - ! temporal loop +LOGICAL :: GEXIT ! flag for the end of the temporal loop INTEGER :: IINFO_ll ! return code of // routines TYPE(TFILEDATA), POINTER :: TZBAKFILE ! Backup file TYPE(DATE_TIME) :: TZDTMODELN ! Date/time of current model computation +TYPE(TFILEPTR), DIMENSION(:), ALLOCATABLE :: TZBAKFILES ! Array of pointers to backup files ! #ifdef CPLOASIS CHARACTER(LEN=28) :: CNAMELIST @@ -192,17 +196,27 @@ END IF !* 2. TEMPORAL LOOP ! ------------- ! +ALLOCATE( TZBAKFILES( NMODEL ) ) +! DO JMODEL=1,NMODEL CALL GO_TOMODEL_ll(JMODEL,IINFO_ll) CALL GOTO_MODEL(JMODEL) CSTORAGE_TYPE='TT' - CALL MODEL_n( 1, TZBAKFILE, TZDTMODELN, GEXIT ) + CALL MODEL_n( 1, TZBAKFILES(JMODEL)%TPFILE, TZDTMODELN, GEXIT ) +END DO +! +! Close backup files +! This is done after previous loop because parent files must stay open for child files (ie to write balloon positions in restarts) +DO JMODEL = 1, NMODEL + TZBAKFILE => TZBAKFILES(JMODEL)%TPFILE IF ( TZBAKFILE%LOPENED ) THEN CALL IO_FILE_CLOSE( TZBAKFILE, TPDTMODELN = TZDTMODELN ) NULLIFY( TZBAKFILE ) END IF END DO ! +DEALLOCATE( TZBAKFILES ) +! IF(GEXIT) THEN !callabortstop CALL ABORT -- GitLab