diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90 index f9e1c3202f6c79bf8072022d49d6c39dc19b0a4c..2ef2f3d1a5d6b98119c56f3e886b163eb47c033c 100644 --- a/src/MNH/turb_hor_thermo_flux.f90 +++ b/src/MNH/turb_hor_thermo_flux.f90 @@ -152,9 +152,8 @@ USE MODI_LES_MEAN_SUBGRID USE MODI_SECOND_MNH ! #ifdef MNH_OPENACC -USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT3DP , MNH_ALLOCATE_ZT2D, & - MNH_ALLOCATE_ZT4D , MNH_REL_ZT4D, & - MNH_CHECK_IN_ZT3D,MNH_CHECK_OUT_ZT3D +USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_FLAT, MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT3DP, & + MNH_RELEASE_FLAT, MNH_CHECK_IN_ZT3D, MNH_CHECK_OUT_ZT3D #endif ! IMPLICIT NONE @@ -286,8 +285,8 @@ allocate( zflxc(JIU,JJU,JKU) ) allocate( zcoeff(JIU,JJU, 1 + jpvext : 3 + jpvext ) ) #else CALL MNH_CHECK_IN_ZT3D("TURB_HOR_THERMO_FLUX") -izflx = MNH_ALLOCATE_ZT3D( zflx ,JIU,JJU,JKU ) -izflxc = MNH_ALLOCATE_ZT3D( zflxc,JIU,JJU,JKU ) +izflx = MNH_ALLOCATE_FLAT( zflx, 1, JIU, 1, JJU,1, JKU ) +izflxc = MNH_ALLOCATE_FLAT( zflxc, 1, JIU, 1, JJU,1, JKU ) ! izvptv= MNH_ALLOCATE_ZT3D( zvptv,JIU,JJU,JKU ) izcoeff= MNH_ALLOCATE_ZT3DP( zcoeff,JIU,JJU, 1 + jpvext , 3 + jpvext ) @@ -1449,7 +1448,7 @@ IF (KRR/=0) THEN +ZCOEFF(:,:,IKB :IKB )*PRM(:,:,IKB :IKB ,1) ) & *0.5* ( PDZY(:,:,IKB+1:IKB+1)+PDZY(:,:,IKB:IKB)) & * PINV_PDYY(:,:,IKB:IKB) ) -! extrapolates the flux under the ground so that the vertical average with +! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value ( warning the tangential surface ! flux has been set to 0 for the moment !! to be improved ) ZFLX(:,:,IKB-1:IKB-1) = 2. * MYM( SPREAD( PSFRM(:,:)* PDIRCOSYW(:,:), 3,1) ) & @@ -1472,42 +1471,42 @@ IF (KRR/=0) THEN ! IF ( KRRL >= 1 .AND. .NOT. L2D) THEN ! Sub-grid condensation IF (.NOT. LFLAT) THEN - ZFLXC(:,:,:) = ZFLXC(:,:,:) & - + 2.*( MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:) ) & - + MZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( & - PDZY(:,:,:)*(MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) )& + ZFLXC(:,:,:) = ZFLXC(:,:,:) & + + 2.*( MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:) ) & + + MZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( & + PDZY(:,:,:)*(MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) ) & ) IF ( KRRI >= 1 ) THEN - PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & - (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) & - + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & - (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )& - * PINV_PDZZ(:,:,:) ) & + PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & + (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) & + + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & + (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) & + * PINV_PDZZ(:,:,:) ) & )*(1.0-PFRAC_ICE(:,:,:)) - PRRS(:,:,:,4) = PRRS(:,:,:,4) + 2. * & - (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) & - + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & - (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )& - * PINV_PDZZ(:,:,:) ) & + PRRS(:,:,:,4) = PRRS(:,:,:,4) + 2. * & + (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) & + + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & + (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) & + * PINV_PDZZ(:,:,:) ) & )*PFRAC_ICE(:,:,:) ELSE - PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & - (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) & - + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & - (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )& - * PINV_PDZZ(:,:,:) ) & + PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & + (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) & + + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & + (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) & + * PINV_PDZZ(:,:,:) ) & ) END IF ELSE ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX ) IF ( KRRI >= 1 ) THEN PRRS(:,:,:,2) = PRRS(:,:,:,2) - 2. * & - DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )*(1.0-PFRAC_ICE(:,:,:)) + DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )*(1.0-PFRAC_ICE(:,:,:)) PRRS(:,:,:,4) = PRRS(:,:,:,4) - 2. * & - DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )*PFRAC_ICE(:,:,:) + DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )*PFRAC_ICE(:,:,:) ELSE PRRS(:,:,:,2) = PRRS(:,:,:,2) - 2. * & - DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) + DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) END IF END IF END IF @@ -1587,7 +1586,7 @@ IF (KRR/=0) THEN *0.5* ( PDZY(:,:,IKB+1)+PDZY(:,:,IKB)) & * PINV_PDYY(:,:,IKB) ) !$acc end kernels -! extrapolates the flux under the ground so that the vertical average with +! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value ( warning the tangential surface ! flux has been set to 0 for the moment !! to be improved ) !$acc kernels @@ -1597,7 +1596,7 @@ IF (KRR/=0) THEN !$acc kernels ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels - ! +! ! Add this source to the conservative mixing ratio sources ! IF (.NOT. L2D) THEN @@ -1854,7 +1853,9 @@ end if #ifndef MNH_OPENACC deallocate (zflx,zflxc,zcoeff) #else -CALL MNH_REL_ZT3D ( IZFLX, IZFLXC, IZCOEFF, & +CALL MNH_RELEASE_FLAT( IZFLXC ) +CALL MNH_RELEASE_FLAT( IZFLX ) +CALL MNH_REL_ZT3D ( IZCOEFF, & IZTMP1_DEVICE, IZTMP2_DEVICE, IZTMP3_DEVICE, IZTMP4_DEVICE, & IZTMP5_DEVICE, IZTMP6_DEVICE, IZTMP7_DEVICE, IZTMP8_DEVICE ) CALL MNH_CHECK_OUT_ZT3D("TURB_HOR_THERMO_FLUX") diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90 index e3545d44f0954600dbaff802e26679e1aa1c4d80..4ddaec46cce4aea2524111b817e8efd38c67979c 100644 --- a/src/MNH/turb_ver_thermo_flux.f90 +++ b/src/MNH/turb_ver_thermo_flux.f90 @@ -992,6 +992,9 @@ IF (LOCEAN) THEN ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) END IF ! +PWTH(:,:,:IKTB) = XUNDEF +PWTH(:,:,IKTE:) = XUNDEF +! DO JK=IKTB+1,IKTE-1 PWTH(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL)) END DO @@ -1548,6 +1551,8 @@ END DO DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = PBETA(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) END DO +!$acc end kernels +!$acc kernels #endif ZA(:,:,IKB) = PBETA(:,:,IKB) * PEMOIST(:,:,IKB) * & 0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )