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