diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90 index 6c8d331cf942b2e1c62aa08b6e6c4260a436bee5..15cb3febaf2e0aec75f53c283913653db49ec2e7 100644 --- a/src/MNH/condensation.f90 +++ b/src/MNH/condensation.f90 @@ -212,16 +212,15 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZCRIAUTIP INTEGER, DIMENSION(:,:), POINTER, CONTIGUOUS :: ITPL ! top levels of troposphere REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZTMIN ! minimum Temp. related to ITPL ! -REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZLV, ZLS, ZCPD +REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZLV, ZLS, ZCPD, ZCONDP REAL :: ZCOND -REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZCONDP REAL :: ZGCOND, ZSBAR, ZSBARC, ZQ1, ZAUTC, ZAUTI, ZGAUV, ZGAUC, ZGAUI, ZGAUTC, ZGAUTI ! Used for integration in Gaussian Probability Density Function REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZSBARP,ZQ1P,ZGCONDP,ZGAUVP,ZAUTCP,ZGAUTCP,ZGAUCP,ZAUTIP,ZGAUTIP,ZGAUIP REAL :: ZTEMP, ZPV, ZQSL, ZPIV, ZQSI, ZLVS ! thermodynamics REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZPVP,ZQSLP,ZPIVP,ZQSIP,ZLVSP -REAL :: ZLL, DZZ, ZZZ ! used for length scales -REAL, DIMENSION(:,:) , POINTER, CONTIGUOUS :: ZZZP -REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: DZZP,ZLLP +REAL :: ZLL, DZZ +REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZZZP +REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZDZZP,ZLLP ! used for length scales REAL :: ZAH, ZA, ZB, ZSIGMA, ZDRW, ZDTL, ZSIG_CONV ! related to computation of Sig_s REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZAHP,ZAP,ZBP,ZSIGMAP,ZDRWP,ZDTLP,ZSIG_CONVP REAL :: ZRCOLD, ZRIOLD @@ -318,7 +317,7 @@ allocate( ZAP(kiu, kju, kku ) ) allocate( ZBP(kiu, kju, kku ) ) allocate( ZSBARP(kiu, kju, kku ) ) allocate( ZSIGMAP(kiu, kju, kku ) ) -allocate( DZZP(kiu, kju, kku ) ) +allocate( ZDZZP(kiu, kju, kku ) ) allocate( ZDRWP(kiu, kju, kku ) ) allocate( ZDTLP(kiu, kju, kku ) ) allocate( ZLLP(kiu, kju, kku ) ) @@ -370,7 +369,7 @@ CALL MNH_MEM_GET( ZAP, kiu, kju, kku ) CALL MNH_MEM_GET( ZBP, kiu, kju, kku ) CALL MNH_MEM_GET( ZSBARP, kiu, kju, kku ) CALL MNH_MEM_GET( ZSIGMAP, kiu, kju, kku ) -CALL MNH_MEM_GET( DZZP, kiu, kju, kku ) +CALL MNH_MEM_GET( ZDZZP, kiu, kju, kku ) CALL MNH_MEM_GET( ZDRWP, kiu, kju, kku ) CALL MNH_MEM_GET( ZDTLP, kiu, kju, kku ) CALL MNH_MEM_GET( ZLLP, kiu, kju, kku ) @@ -396,7 +395,7 @@ CALL MNH_MEM_GET( JKMK, kku ) !$acc data present( PPABS, PZZ, PT, PRV, PRC, PRI, PRS, PRG, PSIGS, PMFCONV, PCLDFR, PSIGRC, & !$acc & ztlk, zrt, zl, zfrac, itpl, ztmin, zlv, zls,zcpd, gwork,& !$acc & ZZZP,JKPP,ZPVP,ZQSLP,ZPIVP,ZQSIP,ZLVSP,ZAHP,ZAP,ZBP,ZSBARP,ZSIGMAP,& -!$acc & DZZP,ZDRWP,ZDTLP,ZLLP,ZSIG_CONVP,ZQ1P,ZGCONDP,ZGAUVP,ZCONDP,ZAUTCP,& +!$acc & ZDZZP,ZDRWP,ZDTLP,ZLLP,ZSIG_CONVP,ZQ1P,ZGCONDP,ZGAUVP,ZCONDP,ZAUTCP,& !$acc & ZGAUTCP,ZGAUCP,ZCRIAUTIP,ZAUTIP,ZGAUTIP,ZGAUIP,INQ1P,ZINCP,ZRCOLDP,ZRIOLDP,& !$acc & JKPK,JKMK ) #endif @@ -560,9 +559,9 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) END IF ELSE ! parameterize Sigma_s with first_order closure - DZZP(JI,JJ,JK) = PZZ(JI,JJ,JKPK(JK)) - PZZ(JI,JJ,JKMK(JK)) + ZDZZP(JI,JJ,JK) = PZZ(JI,JJ,JKPK(JK)) - PZZ(JI,JJ,JKMK(JK)) ZDRWP(JI,JJ,JK) = ZRT(JI,JJ,JKPK(JK)) - ZRT(JI,JJ,JKMK(JK)) - ZDTLP(JI,JJ,JK) = ZTLK(JI,JJ,JKPK(JK)) - ZTLK(JI,JJ,JKMK(JK)) + XG/ZCPD(JI,JJ,JK) * DZZP(JI,JJ,JK) + ZDTLP(JI,JJ,JK) = ZTLK(JI,JJ,JKPK(JK)) - ZTLK(JI,JJ,JKMK(JK)) + XG/ZCPD(JI,JJ,JK) * ZDZZP(JI,JJ,JK) ZLLP(JI,JJ,JK) = ZL(JI,JJ,JK) ! standard deviation due to convection ZSIG_CONVP(JI,JJ,JK) =0. @@ -570,11 +569,11 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ZSIG_CONVP(JI,JJ,JK) = ZCSIG_CONV * PMFCONV(JI,JJ,JK) / ZAP(JI,JJ,JK) ! zsigma should be of order 4.e-4 in lowest 5 km of atmosphere ZSIGMAP(JI,JJ,JK) = SQRT( MAX( 1.E-25, ZCSIGMA * ZCSIGMA * ZLLP(JI,JJ,JK)*ZLLP(JI,JJ,JK) & - /(DZZP(JI,JJ,JK)*DZZP(JI,JJ,JK))*(& - ZAP(JI,JJ,JK)*ZAP(JI,JJ,JK)*ZDRWP(JI,JJ,JK)*ZDRWP(JI,JJ,JK) - 2.*ZAP(JI,JJ,JK)*ZBP(JI,JJ,JK) & - *ZDRWP(JI,JJ,JK)*ZDTLP(JI,JJ,JK) & - + ZBP(JI,JJ,JK)*ZBP(JI,JJ,JK)*ZDTLP(JI,JJ,JK)*ZDTLP(JI,JJ,JK)) + & - ZSIG_CONVP(JI,JJ,JK) * ZSIG_CONVP(JI,JJ,JK) ) ) + /(ZDZZP(JI,JJ,JK)*ZDZZP(JI,JJ,JK))*(& + ZAP(JI,JJ,JK)*ZAP(JI,JJ,JK)*ZDRWP(JI,JJ,JK)*ZDRWP(JI,JJ,JK) - 2.*ZAP(JI,JJ,JK)*ZBP(JI,JJ,JK) & + * ZDRWP(JI,JJ,JK)*ZDTLP(JI,JJ,JK) & + + ZBP(JI,JJ,JK)*ZBP(JI,JJ,JK)*ZDTLP(JI,JJ,JK)*ZDTLP(JI,JJ,JK)) + & + ZSIG_CONVP(JI,JJ,JK) * ZSIG_CONVP(JI,JJ,JK) ) ) END IF ZSIGMAP(JI,JJ,JK)= MAX( 1.E-10, ZSIGMAP(JI,JJ,JK) ) ! ZSIGMAP(JI,JJ,JK)= MAX( 1.E-12, ZSIGMAP(JI,JJ,JK) ) @@ -594,8 +593,7 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) PCLDFR(JI,JJ,JK) = MAX( 0., MIN(1.,0.5*ZGAUVP(JI,JJ,JK))) !Computation of condensate - ZCONDP(JI,JJ,JK) = (EXP(-ZGCONDP(JI,JJ,JK)**2)-ZGCONDP(JI,JJ,JK)*SQRT(XPI)*ZGAUVP(JI,JJ,JK)) & - *ZSIGMAP(JI,JJ,JK)/SQRT(2.*XPI) + ZCONDP(JI,JJ,JK) = (EXP(-ZGCONDP(JI,JJ,JK)**2)-ZGCONDP(JI,JJ,JK)*SQRT(XPI)*ZGAUVP(JI,JJ,JK))*ZSIGMAP(JI,JJ,JK)/SQRT(2.*XPI) ZCONDP(JI,JJ,JK) = MAX(ZCONDP(JI,JJ,JK), 0.) PSIGRC(JI,JJ,JK) = PCLDFR(JI,JJ,JK) @@ -603,14 +601,13 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) !Computation warm/cold Cloud Fraction and content in high water content part IF(GPRESENT_PHLC_HCF .AND. GPRESENT_PHLC_HRC)THEN IF(1-ZFRAC(JI,JJ,JK) > 1.E-20)THEN - ZAUTCP(JI,JJ,JK) = (ZSBARP(JI,JJ,JK) - XCRIAUTC/(PRHODREF(JI,JJ,JK)*(1-ZFRAC(JI,JJ,JK)))) & - /ZSIGMAP(JI,JJ,JK) + ZAUTCP(JI,JJ,JK) = (ZSBARP(JI,JJ,JK) - XCRIAUTC/(PRHODREF(JI,JJ,JK)*(1-ZFRAC(JI,JJ,JK))))/ZSIGMAP(JI,JJ,JK) ZGAUTCP(JI,JJ,JK) = -ZAUTCP(JI,JJ,JK)/SQRT(2.) !Approximation of erf function for Gaussian distribution ZGAUCP(JI,JJ,JK) = 1 - SIGN(1., ZGAUTCP(JI,JJ,JK)) * SQRT(1-EXP(-4*ZGAUTCP(JI,JJ,JK)**2/XPI)) PHLC_HCF(JI,JJ,JK) = MAX( 0., MIN(1.,0.5*ZGAUCP(JI,JJ,JK))) PHLC_HRC(JI,JJ,JK) = (1-ZFRAC(JI,JJ,JK))*(EXP(-ZGAUTCP(JI,JJ,JK)**2)-ZGAUTCP(JI,JJ,JK) & - *SQRT(XPI)*ZGAUCP(JI,JJ,JK))*ZSIGMAP(JI,JJ,JK)/SQRT(2.*XPI) + *SQRT(XPI)*ZGAUCP(JI,JJ,JK))*ZSIGMAP(JI,JJ,JK)/SQRT(2.*XPI) PHLC_HRC(JI,JJ,JK) = PHLC_HRC(JI,JJ,JK) + XCRIAUTC/PRHODREF(JI,JJ,JK) * PHLC_HCF(JI,JJ,JK) PHLC_HRC(JI,JJ,JK) = MAX(PHLC_HRC(JI,JJ,JK), 0.) ELSE @@ -628,7 +625,7 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ZGAUIP(JI,JJ,JK) = 1 - SIGN(1., ZGAUTIP(JI,JJ,JK)) * SQRT(1-EXP(-4*ZGAUTIP(JI,JJ,JK)**2/XPI)) PHLI_HCF(JI,JJ,JK) = MAX( 0., MIN(1.,0.5*ZGAUIP(JI,JJ,JK))) PHLI_HRI(JI,JJ,JK) = ZFRAC(JI,JJ,JK)*(EXP(-ZGAUTIP(JI,JJ,JK)**2)-ZGAUTIP(JI,JJ,JK) & - * SQRT(XPI)*ZGAUIP(JI,JJ,JK))*ZSIGMAP(JI,JJ,JK)/SQRT(2.*XPI) + * SQRT(XPI)*ZGAUIP(JI,JJ,JK))*ZSIGMAP(JI,JJ,JK)/SQRT(2.*XPI) PHLI_HRI(JI,JJ,JK) = PHLI_HRI(JI,JJ,JK) + ZCRIAUTIP(JI,JJ,JK)*PHLI_HCF(JI,JJ,JK) PHLI_HRI(JI,JJ,JK) = MAX(PHLI_HRI(JI,JJ,JK), 0.) ELSE @@ -720,7 +717,7 @@ ENDDO ! CONCURRENT #ifndef MNH_OPENACC deallocate( ztlk, zrt, zl, zfrac, itpl, ztmin, zlv, zls,zcpd, gwork ) deallocate( ZZZP, JKPP, ZPVP, ZQSLP, ZPIVP, ZQSIP, ZLVSP, ZAHP, ZAP, ZBP, ZSBARP, ZSIGMAP ) -deallocate( DZZP, ZDRWP, ZDTLP, ZLLP, ZSIG_CONVP, ZQ1P, ZGCONDP, ZGAUVP, ZCONDP, ZAUTCP ) +deallocate( ZDZZP, ZDRWP, ZDTLP, ZLLP, ZSIG_CONVP, ZQ1P, ZGCONDP, ZGAUVP, ZCONDP, ZAUTCP ) deallocate( ZGAUTCP, ZGAUCP, ZCRIAUTIP, ZAUTIP, ZGAUTIP, ZGAUIP, INQ1P, ZINCP, ZRCOLDP, ZRIOLDP ) deallocate( JKPK,JKMK ) #else diff --git a/src/MNH/fft55.f90 b/src/MNH/fft55.f90 index 805c050246737287c2decdd383c3aab6f5ffe1ed..4bc2cb5bb391bb9f48d3feba817b5f9318d34cb8 100644 --- a/src/MNH/fft55.f90 +++ b/src/MNH/fft55.f90 @@ -154,6 +154,7 @@ IEVEN=MOD(IN,2) INH=IN/2 INN=2*IN INBLOX=1+(ILOT-1)/NVECLEN +!INVEX = remaining of the division of NVECLEN by KLOT INVEX=ILOT-(INBLOX-1)*NVECLEN IF (KISIGN.EQ.1) THEN ! diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90 index 63f86857964996005d034ba866a4e7287cf7fd3e..c947980f005dd92baec85981ead1e2a86c86af1f 100644 --- a/src/MNH/ice4_compute_pdf.f90 +++ b/src/MNH/ice4_compute_pdf.f90 @@ -122,8 +122,6 @@ INTEGER :: IHSUBG_PR_PDF ! temporary variable for OpenCC character limitation (C ! !------------------------------------------------------------------------------- -! !$acc data copyin( XRTMIN ) - !$acc data present(PRHODREF,PRCT,PRIT,PCF,PT,PSIGMA_RC, & !$acc& PHLC_HCF,PHLC_LCF,PHLC_HRC,PHLC_LRC,PHLI_HCF,PHLI_LCF,PHLI_HRI,PHLI_LRI,PRF) diff --git a/src/MNH/ice4_rainfr_vert.f90 b/src/MNH/ice4_rainfr_vert.f90 index 629613e5d13fd48bf5a5e917fa7b11b4ff076ddb..24631212f5e82ec457c77051db746c7543c67f04 100644 --- a/src/MNH/ice4_rainfr_vert.f90 +++ b/src/MNH/ice4_rainfr_vert.f90 @@ -55,7 +55,6 @@ REAL, DIMENSION(:,:,:), OPTIONAL,INTENT(IN) :: PRH !Hail field INTEGER :: JI, JJ, JK LOGICAL :: MASK ! -! !$acc data copyin( XRTMIN ) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/mode_prandtl.f90 b/src/MNH/mode_prandtl.f90 index 243d0b8cb317b8d986fb59f62fd313dc4edb6660..0e08725727de7f9706dbe18a793e7a68f95f697e 100644 --- a/src/MNH/mode_prandtl.f90 +++ b/src/MNH/mode_prandtl.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -899,7 +899,7 @@ SUBROUTINE D_M3_WTH_W2R_O_DDTDZ(PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST,PD INTEGER :: IKB, IKE #ifndef MNH_OPENACC REAL, DIMENSION(:,:,:), allocatable :: ZTMP1_DEVICE - #else +#else REAL, DIMENSION(:,:,:), pointer,contiguous :: ZTMP1_DEVICE #endif @@ -973,7 +973,7 @@ SUBROUTINE M3_WTH_WR2(PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ INTEGER :: IKB, IKE #ifndef MNH_OPENACC REAL, DIMENSION(:,:,:), allocatable :: ZTMP1_DEVICE, ZTMP2_DEVICE - #else +#else REAL, DIMENSION(:,:,:), pointer,contiguous :: ZTMP1_DEVICE, ZTMP2_DEVICE #endif diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90 index d27cce3771b9dbdb5774abf3fb827c7f53be2f49..6bcc60244c930d1777fde795fbe9917a2d76142b 100644 --- a/src/MNH/pressurez.f90 +++ b/src/MNH/pressurez.f90 @@ -702,6 +702,13 @@ IF(CEQNSYS=='LHE'.AND. LFLAT .AND. LCARTESIAN .AND. .NOT. LIBM) THEN CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'PRESSUREZ', 'OpenACC: CEQNSYS=LHE.AND. LFLAT .AND. LCARTESIAN' // & ' .AND. .NOT. LIBM not yet tested' ) #endif + +#ifdef MNH_MGSOLVER + IF ( HPRESOPT == "ZSOLV" ) & + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'PRESSUREZ', 'OpenACC: CEQNSYS=LHE.AND. LFLAT .AND. LCARTESIAN' // & + ' .AND. .NOT. LIBM with ZSOLV: not (yet) supported' ) +#endif + ! flat cartesian LHE case -> exact solution IF ( HPRESOPT /= "ZRESI" ) THEN CALL FLAT_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOT,PAF,PBF,PCF, & diff --git a/src/MNH/shuman.f90 b/src/MNH/shuman.f90 index 12a702243b05f5836dc87624e05ea1bfc77d8ec6..6835159d294ebf03b8c8d8b80c249ee0a62329f8 100644 --- a/src/MNH/shuman.f90 +++ b/src/MNH/shuman.f90 @@ -1,12 +1,8 @@ !MNH_LIC Copyright 1994-2014 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -!----------------------------------------------------------------- ! ################## MODULE MODI_SHUMAN ! ################## diff --git a/src/MNH/slow_terms.f90 b/src/MNH/slow_terms.f90 index 2d7e5b7f94da0e5946cd54ef1e1acbe9e5d2adc6..e9098609247a0f776b8a8157c7bb9a3ce6475f97 100644 --- a/src/MNH/slow_terms.f90 +++ b/src/MNH/slow_terms.f90 @@ -164,11 +164,11 @@ USE MODD_CST, only: XALPW, XBETAW, XGAMW, XCL, XCPD, XCPV, XLVTT, XMD, XM USE MODD_PARAMETERS, only: JPVEXT use mode_budget, only: Budget_store_init, Budget_store_end -use mode_mppdb - #ifdef MNH_OPENACC - USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE +USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE #endif +use mode_mppdb + #if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) use modi_bitrep #endif @@ -220,8 +220,13 @@ INTEGER :: IKE ! the microphysical sources have to be computed ! REAL :: ZTSPLITR ! Small time step for rain sedimentation ! -REAL, DIMENSION(:,:,:), POINTER,CONTIGUOUS :: ZT,ZW,ZW1,ZW2,ZW3,ZEXNT,ZDZZ ! Work arrays -LOGICAL, DIMENSION(:,:,:), POINTER,CONTIGUOUS :: G3D +#ifndef MNH_OPENACC +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZT,ZW,ZW1,ZW2,ZW3,ZEXNT,ZDZZ ! Work arrays +LOGICAL, DIMENSION(:,:,:), ALLOCATABLE :: G3D +#else +REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZT,ZW,ZW1,ZW2,ZW3,ZEXNT,ZDZZ ! Work arrays +LOGICAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: G3D +#endif ! INTEGER :: JI,JJ,IC,JL ! loop control for packed array INTEGER :: JIU, JJU, JKU