From 7ba30e8c41444bb6e259fc543de5750b1e0c76c6 Mon Sep 17 00:00:00 2001 From: Matthew Masarik Date: Wed, 12 Jan 2022 14:47:44 -0600 Subject: [PATCH 1/4] w3iorsmd: memory leak fix --- model/src/w3iorsmd.F90 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 7f5cbd1643..de8470dc5d 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -606,6 +606,15 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) #ifdef W3_T WRITE (NDST,9005) TYPE #endif + +!!!MTM0 + ! Clean up file handles and allocated arrays + INQUIRE (UNIT=NDSR, OPENED=UNITOPEN) + IF (UNITOPEN) CLOSE(NDSR) + IF (ALLOCATED(WRITEBUFF)) DEALLOCATE(WRITEBUFF) + IF (ALLOCATED(TMP)) DEALLOCATE(TMP) + IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2) +!!!MTM0 RETURN ELSE IF ( IAPROC.LE.NAPROC .OR. IAPROC.EQ. NAPRST ) THEN #ifdef W3_DEBUGIO @@ -1479,9 +1488,14 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ! ! Close file --------------------------------------------------------- * ! + IF (WRITE) THEN IF ( .NOT.IOSFLG .OR. IAPROC.EQ.NAPRST ) THEN CLOSE ( NDSR ) END IF + ELSE + CLOSE ( NDSR ) + END IF + ! #ifdef W3_DEBUGIO WRITE(740+IAPROC,*) 'W3IORS, step 9' From 0b90be26b65818a57d176f3505bcf31b8d553500 Mon Sep 17 00:00:00 2001 From: Matthew Masarik Date: Wed, 12 Jan 2022 16:28:30 -0600 Subject: [PATCH 2/4] w3iorsmd: add needed logical var UNITOPEN --- model/src/w3iorsmd.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index de8470dc5d..6d6a3ab227 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -335,6 +335,8 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME CHARACTER(LEN=15) :: TIMETAG + + LOGICAL :: UNITOPEN !/ !/ ------------------------------------------------------------------- / !/ From c1a115a8e7ef62d6a91fa58602145eac834d44a9 Mon Sep 17 00:00:00 2001 From: Matthew Masarik Date: Fri, 14 Jan 2022 20:30:09 +0000 Subject: [PATCH 3/4] w3iorsmd.F90: clean up fix --- model/src/w3iorsmd.F90 | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 6d6a3ab227..07b391b2cc 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -335,7 +335,6 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME CHARACTER(LEN=15) :: TIMETAG - LOGICAL :: UNITOPEN !/ !/ ------------------------------------------------------------------- / @@ -608,15 +607,13 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) #ifdef W3_T WRITE (NDST,9005) TYPE #endif + ! Clean up file handles and allocated arrays + INQUIRE (UNIT=NDSR, OPENED=UNITOPEN) + IF (UNITOPEN) CLOSE(NDSR) + IF (ALLOCATED(WRITEBUFF)) DEALLOCATE(WRITEBUFF) + IF (ALLOCATED(TMP)) DEALLOCATE(TMP) + IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2) -!!!MTM0 - ! Clean up file handles and allocated arrays - INQUIRE (UNIT=NDSR, OPENED=UNITOPEN) - IF (UNITOPEN) CLOSE(NDSR) - IF (ALLOCATED(WRITEBUFF)) DEALLOCATE(WRITEBUFF) - IF (ALLOCATED(TMP)) DEALLOCATE(TMP) - IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2) -!!!MTM0 RETURN ELSE IF ( IAPROC.LE.NAPROC .OR. IAPROC.EQ. NAPRST ) THEN #ifdef W3_DEBUGIO @@ -1497,7 +1494,6 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) ELSE CLOSE ( NDSR ) END IF - ! #ifdef W3_DEBUGIO WRITE(740+IAPROC,*) 'W3IORS, step 9' From 6306b29be7ded4e66de889d48c2294600cd3a07f Mon Sep 17 00:00:00 2001 From: Matthew Masarik Date: Mon, 17 Jan 2022 13:53:52 +0000 Subject: [PATCH 4/4] w3iorsmd: rename logical variable --- model/src/w3iorsmd.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/model/src/w3iorsmd.F90 b/model/src/w3iorsmd.F90 index 07b391b2cc..acbb81c1f3 100644 --- a/model/src/w3iorsmd.F90 +++ b/model/src/w3iorsmd.F90 @@ -328,6 +328,7 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) LOGICAL :: WRITE, IOSFLG LOGICAL :: FLOGOA(NOGRP,NGRPP) + LOGICAL :: NDSROPN CHARACTER(LEN=4) :: TYPE CHARACTER(LEN=10) :: VERTST ! CHARACTER(LEN=21) :: FNAME @@ -335,7 +336,6 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) CHARACTER(LEN=26) :: IDTST CHARACTER(LEN=30) :: TNAME CHARACTER(LEN=15) :: TIMETAG - LOGICAL :: UNITOPEN !/ !/ ------------------------------------------------------------------- / !/ @@ -608,8 +608,8 @@ SUBROUTINE W3IORS ( INXOUT, NDSR, DUMFPI, IMOD, FLRSTRT ) WRITE (NDST,9005) TYPE #endif ! Clean up file handles and allocated arrays - INQUIRE (UNIT=NDSR, OPENED=UNITOPEN) - IF (UNITOPEN) CLOSE(NDSR) + INQUIRE (UNIT=NDSR, OPENED=NDSROPN) + IF (NDSROPN) CLOSE(NDSR) IF (ALLOCATED(WRITEBUFF)) DEALLOCATE(WRITEBUFF) IF (ALLOCATED(TMP)) DEALLOCATE(TMP) IF (ALLOCATED(TMP2)) DEALLOCATE(TMP2)