diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90 index 4847d925cd0e5ef53211ee64bbe9f6522089b5a0..8a49ae40f56303340297e2e990e70552cca9e69d 100644 --- a/src/MNH/ice4_fast_rg.f90 +++ b/src/MNH/ice4_fast_rg.f90 @@ -277,7 +277,7 @@ CALL MNH_MEM_GET( zrwetg_init, isize ) ! !* 6.1 rain contact freezing ! -!$acc kernels +!$acc kernels present_cr( GDRY, PCOMPUTE, PRGT, PRST, XRTMIN, ZDRY ) DO JL=1, ISIZE ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4)) &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3)) @@ -403,8 +403,9 @@ ENDIF ! Wet and dry collection of rs on graupel (6.2.1) IGDRY = 0 -!$acc loop private(IDX) independent -DO JJ = 1, SIZE(GDRY) +!$acc end kernels +!$acc parallel loop private(idx) independent +DO CONCURRENT( JJ = 1 : SIZE( GDRY ) ) ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5)) &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6)) &PCOMPUTE(JJ) @@ -419,7 +420,6 @@ DO JJ = 1, SIZE(GDRY) GDRY(JJ) = .FALSE. END IF END DO -!$acc end kernels ! !$acc kernels IF(LDSOFT) THEN !$acc kernels @@ -513,13 +513,13 @@ ELSE !$acc end kernels ENDIF ENDIF -!$acc kernels +!acc kernels present_cr( GDRY, PCOMPUTE, PRGT, PRRT, XRTMIN, ZDRY ) ! !* 6.2.6 accretion of raindrops on the graupeln ! IGDRY = 0 -!$acc loop private(IDX) independent -DO JJ = 1, SIZE(GDRY) +!$acc parallel loop private(idx) independent +DO CONCURRENT( JJ = 1 : SIZE( GDRY ) ) ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3)) &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6)) &PCOMPUTE(JJ) @@ -534,7 +534,6 @@ DO JJ = 1, SIZE(GDRY) GDRY(JJ) = .FALSE. END IF END DO -!$acc end kernels IF(LDSOFT) THEN !$acc kernels diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90 index bba6ba67b3c4aeca38ce8ff1935525186b2e7b34..94a0ad92c338d299574c904da60c39c317555690 100644 --- a/src/MNH/ice4_fast_rs.f90 +++ b/src/MNH/ice4_fast_rs.f90 @@ -291,8 +291,9 @@ ENDDO !* 5.1 cloud droplet riming of the aggregates ! IGRIM = 0 -!$acc loop private(IDX) independent -DO JJ = 1, SIZE(GRIM) +!$acc end kernels +!$acc parallel loop private(idx) independent present_cr( I1, GRIM, PCOMPUTE, PRCT, PRST, XRTMIN, ZRIM ) +DO CONCURRENT( JJ = 1 : SIZE( GRIM ) ) ZRIM(JJ)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JJ))) * & !WHERE(PRCT(:)>XRTMIN(2)) &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5)) &PCOMPUTE(JJ) @@ -307,8 +308,6 @@ DO JJ = 1, SIZE(GRIM) GRIM(JJ) = .FALSE. END IF END DO -!$acc end kernels -! ! Collection of cloud droplets by snow: this rate is used for riming (T<0) and for conversion/melting (T>0) IF(LDSOFT) THEN !$acc kernels @@ -466,8 +465,9 @@ ENDDO !* 5.2 rain accretion onto the aggregates ! IGACC = 0 -!$acc loop private(IDX) independent -DO JJ = 1, SIZE(GACC) +!$acc end kernels +!$acc parallel loop private(idx) independent present_cr( I1, GACC, PCOMPUTE, PRRT, PRST, XRTMIN, ZACC ) +DO CONCURRENT( JJ = 1 : SIZE( GACC ) ) ZACC(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & !WHERE(PRRT(:)>XRTMIN(3)) &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5)) &PCOMPUTE(JJ) @@ -482,8 +482,6 @@ DO JJ = 1, SIZE(GACC) GACC(JJ) = .FALSE. END IF END DO -!$acc end kernels - IF(LDSOFT) THEN !$acc kernels DO JL=1, ISIZE diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90 index cd6c6e0c0298f825e3dad8dd06363130e42a62b0..ebd23fb6923ef2b023b899d7014d0252693ad348 100644 --- a/src/MNH/ice4_sedimentation_split.f90 +++ b/src/MNH/ice4_sedimentation_split.f90 @@ -285,6 +285,7 @@ IF (OSEDIC) THEN !$acc kernels ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND !$acc end kernels +#if 0 !$acc kernels !$acc loop independent collapse(3) DO JK = KKTB, KKTE @@ -300,6 +301,20 @@ IF (OSEDIC) THEN END DO END DO !$acc end kernels +#else +!$acc kernels present_cr( PSEA, PTOWN, ZCONC3D, ZFSEDC, ZLBC, ZRAY ) +!$acc loop independent + DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = KKTB : KKTE ) + ZLBC(JI,JJ,JK) = PSEA(JI,JJ)*XLBC(2)+(1.-PSEA(JI,JJ))*XLBC(1) + ZFSEDC(JI,JJ,JK) = (PSEA(JI,JJ)*XFSEDC(2)+(1.-PSEA(JI,JJ))*XFSEDC(1)) + ZFSEDC(JI,JJ,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(JI,JJ,JK)) + ZCONC3D(JI,JJ,JK)= (1.-PTOWN(JI,JJ))*ZCONC_TMP(JI,JJ)+PTOWN(JI,JJ)*XCONC_URBAN + ZRAY(JI,JJ,JK) = 0.5*((1.-PSEA(JI,JJ))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + & + PSEA(JI,JJ)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2))) + + END DO +!$acc end kernels +#endif ELSE !$acc kernels ZCONC3D(:,:,:) = XCONC_LAND @@ -591,9 +606,8 @@ ZREMAINT(:,:) = PTSTEP !$acc update self(ZREMAINT) ! DO WHILE (ANY(ZREMAINT>0.)) -!$acc kernels copyout( ISEDIM ) ISEDIM = 0 -!$acc loop independent private(IDX) +!$acc parallel loop private(idx) independent DO JK = KKTB,KKTE !$acc loop independent collapse(2) DO JJ = KJB,KJE @@ -612,7 +626,6 @@ DO WHILE (ANY(ZREMAINT>0.)) END DO END DO END DO -!$acc end kernels ! ! ! diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90 index 9253680da88c79e936e3f31a35bcbf559323563b..0ee449851e549714e199b0c4831f77c23a036306 100644 --- a/src/MNH/rain_ice_red.f90 +++ b/src/MNH/rain_ice_red.f90 @@ -1236,6 +1236,7 @@ IF(KRR==7) THEN ENDDO ENDDO ELSE +#if 0 !$acc loop independent collapse(3) DO JK = 1, KKT DO JJ = 1, KJT @@ -1250,6 +1251,17 @@ ELSE ENDDO ENDDO ENDDO +#else +DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) + ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) + ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) & + /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & + + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) + ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) & + /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & + + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) +END DO +#endif ENDIF !$acc end kernels ! @@ -1956,6 +1968,7 @@ CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, GDNOTMICRO, & PTHT, PPABST, PRHODREF, PEXN, ZLSFACT3D, ZT, & PRVT, & PCIT, ZZ_RVHENI_MR) +#if 0 !$acc kernels !$acc loop independent collapse(3) DO JK = 1, KKT @@ -1971,6 +1984,18 @@ DO JK = 1, KKT ENDDO ENDDO !$acc end kernels +#else +!$acc kernels present_cr( PEXNREF, PRIS, PRVS, PTHS, ZZ_LSFACT, ZZ_LVFACT, ZZ_RVHENI ) +DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) + ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) + ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) + ZZ_RVHENI(JI,JJ,JK) = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP) + PRIS(JI,JJ,JK)=PRIS(JI,JJ,JK)+ZZ_RVHENI(JI,JJ,JK) + PRVS(JI,JJ,JK)=PRVS(JI,JJ,JK)-ZZ_RVHENI(JI,JJ,JK) + PTHS(JI,JJ,JK)=PTHS(JI,JJ,JK) + ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK) +END DO +!$acc end kernels +#endif !$acc update self(PRIS,PRVS,PTHS) ! if ( lbu_enable ) then