Skip to content
Snippets Groups Projects
Commit 4592b94b authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 08/11/2023: mean_field: allocate arrays only when necessary

parent 4adace91
No related branches found
No related tags found
No related merge requests found
!MNH_LIC Copyright 2009-2021 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC Copyright 2009-2023 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.
......@@ -90,23 +90,23 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PSVT
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZTEMPT
INTEGER :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds
INTEGER :: JI,JJ,JK ! Loop indexes
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZUMEAN_OLD
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZWMEAN_OLD
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZTHMEAN_OLD
!
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRT
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZQSAT_W
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZQSAT_I
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZQACT
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRH_W
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRH_I
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRH_P
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZFRAC
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZUMEAN_OLD
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWMEAN_OLD
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHMEAN_OLD
!
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRT
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZQSAT_W
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZQSAT_I
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZQACT
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRH_W
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRH_I
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRH_P
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFRAC
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZAUX_WIFF
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZAUX_WIDD
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2)) :: ZRH_W_MAXCOL
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2)) :: ZRH_I_MAXCOL
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2)) :: ZRH_P_MAXCOL
REAL, DIMENSION(:,:), ALLOCATABLE :: ZRH_W_MAXCOL
REAL, DIMENSION(:,:), ALLOCATABLE :: ZRH_I_MAXCOL
REAL, DIMENSION(:,:), ALLOCATABLE :: ZRH_P_MAXCOL
!
INTEGER :: IMI !Current model index
!
......@@ -130,6 +130,18 @@ ZTEMPT = PTHT*(((PPABST)/XP00)**(XRD/XCPD))
!
!
IF(LUSERV) THEN
ALLOCATE( ZRT (IIU, IJU, IKU) )
ALLOCATE( ZQSAT_W(IIU, IJU, IKU) )
ALLOCATE( ZQSAT_I(IIU, IJU, IKU) )
ALLOCATE( ZQACT (IIU, IJU, IKU) )
ALLOCATE( ZRH_W (IIU, IJU, IKU) )
ALLOCATE( ZRH_I (IIU, IJU, IKU) )
ALLOCATE( ZRH_P (IIU, IJU, IKU) )
ALLOCATE( ZFRAC (IIU, IJU, IKU) )
ALLOCATE( ZRH_W_MAXCOL( IIU, IJU) )
ALLOCATE( ZRH_I_MAXCOL( IIU, IJU) )
ALLOCATE( ZRH_P_MAXCOL( IIU, IJU) )
! Calculation of saturation specific humidity over water/ice
!
ZQSAT_W = QSAT (ZTEMPT, PPABST)
......@@ -173,7 +185,10 @@ IF(LUSERV) THEN
XRH_W_MAXCOL_MEAN = XRH_W_MAXCOL_MEAN + ZRH_W_MAXCOL
XRH_I_MAXCOL_MEAN = XRH_I_MAXCOL_MEAN + ZRH_I_MAXCOL
XRH_P_MAXCOL_MEAN = XRH_P_MAXCOL_MEAN + ZRH_P_MAXCOL
END IF
DEALLOCATE( ZRT, ZQSAT_W, ZQSAT_I, ZQACT, ZRH_W, ZRH_I, ZRH_P, ZFRAC )
DEALLOCATE( ZRH_W_MAXCOL, ZRH_I_MAXCOL, ZRH_P_MAXCOL )
END IF
IF (LPASPOL) XSVT_MEAN = PSVT + XSVT_MEAN
IF (CTURB/='NONE') XTKEM_MEAN = PTKET + XTKEM_MEAN
......@@ -197,9 +212,14 @@ END IF
!
! Save old mean values for covariance computations
!
ZUMEAN_OLD = XUM_MEAN
ZWMEAN_OLD = XWM_MEAN
ZTHMEAN_OLD = XTHM_MEAN
IF (LCOV_FIELD) THEN
ALLOCATE( ZUMEAN_OLD (IIU, IJU, IKU) )
ALLOCATE( ZWMEAN_OLD (IIU, IJU, IKU) )
ALLOCATE( ZTHMEAN_OLD(IIU, IJU, IKU) )
ZUMEAN_OLD (:,:,:) = XUM_MEAN (:,:,:)
ZWMEAN_OLD (:,:,:) = XWM_MEAN (:,:,:)
ZTHMEAN_OLD(:,:,:) = XTHM_MEAN(:,:,:)
END IF
! Welford method for variables whom we compute variances
!
CALL UPDATE_WELFORD(MEAN_COUNT,XUM_MEAN,XU2_M2,PUT)
......@@ -216,6 +236,7 @@ END IF
XUW_MEAN = XUW_MEAN + (PUT-ZUMEAN_OLD)*(PWT-XWM_MEAN)
XVW_MEAN = XVW_MEAN + (PWT-ZWMEAN_OLD)*(PVT-XVM_MEAN)
XWTH_MEAN = XVW_MEAN + (PWT-ZWMEAN_OLD)*(PTHT-XTHM_MEAN)
DEALLOCATE( ZUMEAN_OLD, ZWMEAN_OLD, ZTHMEAN_OLD )
END IF
!
!-----------------------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment