From f9d8562bd0e72569ba9c159322710d7995dc4106 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 6 Dec 2021 13:48:01 +0100
Subject: [PATCH] Philippe 06/12/2021: correct memory leaks (missing
 deallocates for pointers)

---
 src/MNH/ice4_fast_rg.f90             | 16 +++++++++++++-
 src/MNH/ice4_fast_rs.f90             | 18 +++++++++++++++-
 src/MNH/ice4_sedimentation_split.f90 | 11 +++++++++-
 src/MNH/ice4_tendencies.f90          | 32 +++++++++++++++++++++++++++-
 src/MNH/resolved_cloud.f90           | 15 ++++++++-----
 src/MNH/sources_neg_correct.f90      |  4 +++-
 src/ZSOLVER/gdiv.f90                 |  4 +++-
 src/ZSOLVER/pressurez.f90            |  6 +++++-
 8 files changed, 94 insertions(+), 12 deletions(-)

diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90
index 68a0c829e..579954a5b 100644
--- a/src/MNH/ice4_fast_rg.f90
+++ b/src/MNH/ice4_fast_rg.f90
@@ -840,7 +840,21 @@ END IF
 
 !$acc end data
 
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+deallocate( zrwetg_init )
+deallocate( zrdryg_init )
+deallocate( zzw         )
+deallocate( zvec3       )
+deallocate( zvec2       )
+deallocate( zvec1       )
+deallocate( zmask       )
+deallocate( zdryg       )
+deallocate( zdry        )
+deallocate( gdry        )
+deallocate( ivec2       )
+deallocate( ivec1       )
+deallocate( i1          )
+#else
 CALL MNH_RELEASE_FLAT( IZRWETG_INIT )
 CALL MNH_RELEASE_FLAT( IZRDRYG_INIT )
 CALL MNH_RELEASE_FLAT( IZZW   )
diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90
index 9d635fc3e..b7a571863 100644
--- a/src/MNH/ice4_fast_rs.f90
+++ b/src/MNH/ice4_fast_rs.f90
@@ -750,7 +750,23 @@ END IF
 
 !$acc end data
 
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+deallocate( zfreez_rate )
+deallocate( zzw6        )
+deallocate( zzw2        )
+deallocate( zzw         )
+deallocate( zvec3       )
+deallocate( zvec2       )
+deallocate( zvec1       )
+deallocate( zmask       )
+deallocate( zacc        )
+deallocate( zrim        )
+deallocate( gacc        )
+deallocate( grim        )
+deallocate( ivec2       )
+deallocate( ivec1       )
+deallocate( i1          )
+#else
 CALL MNH_RELEASE_FLAT( IZFREEZ_RATE )
 CALL MNH_RELEASE_FLAT( IZZW6        )
 CALL MNH_RELEASE_FLAT( IZZW2        )
diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90
index 1c72edd94..41c54c295 100644
--- a/src/MNH/ice4_sedimentation_split.f90
+++ b/src/MNH/ice4_sedimentation_split.f90
@@ -712,7 +712,16 @@ END IF
 
 !$acc end data
 
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+deallocate( zwsed )
+deallocate( zremaint )
+deallocate( zrsmin )
+deallocate( zmax_tstep )
+deallocate( zmrchange )
+deallocate( i3 )
+deallocate( i2 )
+deallocate( i1 )
+#else
 CALL MNH_REL_IT1D( ii1, ii2, ii3 )
 CALL MNH_RELEASE_FLAT( IZWSED )
 CALL MNH_RELEASE_FLAT( IZRSMIN )
diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90
index d2145de2b..2329e5d1b 100644
--- a/src/MNH/ice4_tendencies.f90
+++ b/src/MNH/ice4_tendencies.f90
@@ -981,7 +981,36 @@ END IF
 
 !$acc end data
 
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+deallocate( zrht3d )
+deallocate( zrgt3d )
+deallocate( zrst3d )
+deallocate( zrrt3d )
+deallocate( zrgsi_mr )
+deallocate( zrgsi    )
+deallocate( zlbdar_rf)
+deallocate( zlbdah   )
+deallocate( zlbdag   )
+deallocate( zlbdas   )
+deallocate( zlbdar   )
+deallocate( zrf      )
+deallocate( zcj      )
+deallocate( zai      )
+deallocate( zdv      )
+deallocate( zka      )
+deallocate( zzw      )
+deallocate( zrht     )
+deallocate( ztht     )
+deallocate( zt       )
+deallocate( zrgt     )
+deallocate( zrst     )
+deallocate( zrit     )
+deallocate( zrrt     )
+deallocate( zrct     )
+deallocate( zrvt     )
+deallocate( zwetg    )
+deallocate( gldcompute )
+#else
 CALL MNH_REL_ZT3D( IZRRT3D, IZRST3D, IZRGT3D, IZRHT3D )
 CALL MNH_RELEASE_FLAT( IZRGSI_MR )
 CALL MNH_RELEASE_FLAT( IZRGSI )
@@ -1006,6 +1035,7 @@ CALL MNH_RELEASE_FLAT( IZRRT )
 CALL MNH_RELEASE_FLAT( IZRCT )
 CALL MNH_RELEASE_FLAT( IZRVT )
 CALL MNH_RELEASE_FLAT( IZWETG )
+deallocate( gldcompute )
 #endif
 
 !$acc end data
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 934977056..0938d6443 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -1293,11 +1293,16 @@ END IF
 !$acc end data
 
 #ifndef MNH_OPENACC
-deallocate (LLMICRO)
-deallocate (ZDZZ,ZEXN,ZZZ)
-deallocate (ZINPRI)
-deallocate (ZTHSSTEP)
-deallocate (ZRSSTEP)
+deallocate( ZRSSTEP )
+deallocate( ZTHSSTEP )
+deallocate( ZINPRI )
+deallocate( ZZZ )
+deallocate( ZPRCFR )
+deallocate( ZICEFR )
+deallocate( ZFPR )
+deallocate( ZEXN )
+deallocate( ZDZZ )
+deallocate( LLMICRO )
 #else
 CALL MNH_REL_ZT4D(SIZE(PRS,4) , IZRSSTEP )
 CALL MNH_REL_ZT3D ( IZTHSSTEP )
diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90
index 2f115d901..3c7f67395 100644
--- a/src/MNH/sources_neg_correct.f90
+++ b/src/MNH/sources_neg_correct.f90
@@ -406,7 +406,9 @@ end select CLOUD
 
 !$acc end data
 
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+deallocate( zexn, zlv, zcph, zls, zcor )
+#else
 call Mnh_rel_zt3d ( izt, izexn, izlv, izcph, izls, izcor )
 #endif
 
diff --git a/src/ZSOLVER/gdiv.f90 b/src/ZSOLVER/gdiv.f90
index b24671946..567912df0 100644
--- a/src/ZSOLVER/gdiv.f90
+++ b/src/ZSOLVER/gdiv.f90
@@ -344,7 +344,9 @@ END IF
 ! wait on GPU for all corner update
 !$acc wait
 !
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+DEALLOCATE( ZUC, ZVC, ZWC, Z1, Z2, Z3 )
+#else
 CALL MNH_REL_ZT3D (IZUC,IZVC,IZWC,IZ1,IZ2,IZ3,IZTMP1,IZTMP2)
 #endif
 !
diff --git a/src/ZSOLVER/pressurez.f90 b/src/ZSOLVER/pressurez.f90
index 21a0b926c..67ee08c9f 100644
--- a/src/ZSOLVER/pressurez.f90
+++ b/src/ZSOLVER/pressurez.f90
@@ -1061,7 +1061,11 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN
 !
 END IF
 !
-#ifdef MNH_OPENACC
+#ifndef MNH_OPENACC
+deallocate( ZDV_SOURCE )
+deallocate( ZTHETAV )
+deallocate( ZPHIT )
+#else
 CALL MNH_REL_ZT3D ( IZPRHODJ,IZMXM_PRHODJ,IZMZM_PRHODJ,IZGZ_M_W,IZMYM_PRHODJ )
 CALL MNH_REL_ZT3D ( IZDV_SOURCE,IZTHETAV,IZPHIT)
 #endif
-- 
GitLab