Skip to content
Snippets Groups Projects
Commit c4040f2e authored by RODIER Quentin's avatar RODIER Quentin
Browse files

Quentin 25/09/2024: add kernels for ice4_fast_*

parent e2b5b7fe
No related branches found
No related tags found
No related merge requests found
......@@ -115,6 +115,8 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RG', 0, ZHOOK_HANDLE)
!
!* 6.1 rain contact freezing
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRIT(JL)>ICED%XRTMIN(4) .AND. PRRT(JL)>ICED%XRTMIN(3) .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -142,11 +144,14 @@ DO JL=1, KSIZE
PRICFRR(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
!
!* 6.3 compute the graupel growth
!
! Wet and dry collection of rc and ri on graupel
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRGT(JL)>ICED%XRTMIN(6) .AND. PRCT(JL)>ICED%XRTMIN(2) .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -168,8 +173,11 @@ DO JL=1, KSIZE
PRG_TEND(JL, IRIWETG)=0.
ENDIF
ENDDO
!$acc end kernels
! Wet and dry collection of rs on graupel (6.2.1)
!$acc kernels
!$acc loop independent
DO JL = 1, KSIZE
IF (PRST(JL)>ICED%XRTMIN(5) .AND. PRGT(JL)>ICED%XRTMIN(6) .AND. LDCOMPUTE(JL)) THEN
GDRY(JL) = .TRUE.
......@@ -179,6 +187,7 @@ DO JL = 1, KSIZE
PRG_TEND(JL, IRSWETG)=0.
ENDIF
ENDDO
!$acc end kernels
IF(.NOT. LDSOFT) THEN
CALL INTERP_MICRO_2D(KPROMA, KSIZE, PLBDAG(:), PLBDAS(:), ICEP%NDRYLBDAG, ICEP%NDRYLBDAS, &
......@@ -209,6 +218,8 @@ ENDIF
!
!* 6.2.6 accretion of raindrops on the graupeln
!
!$acc kernels
!$acc loop independent
DO JL = 1, KSIZE
IF (PRRT(JL)>ICED%XRTMIN(3) .AND. PRGT(JL)>ICED%XRTMIN(6) .AND. LDCOMPUTE(JL)) THEN
GDRY(JL) = .TRUE.
......@@ -217,6 +228,7 @@ DO JL = 1, KSIZE
PRG_TEND(JL, IRRDRYG)=0.
ENDIF
ENDDO
!$acc end kernels
IF(.NOT. LDSOFT) THEN
!
CALL INTERP_MICRO_2D(KPROMA, KSIZE, PLBDAG(:), PLBDAR(:), ICEP%NDRYLBDAG, ICEP%NDRYLBDAR, &
......@@ -238,12 +250,17 @@ IF(.NOT. LDSOFT) THEN
ENDIF
ENDIF
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
ZRDRYG_INIT(JL)=PRG_TEND(JL, IRCDRYG)+PRG_TEND(JL, IRIDRYG)+ &
&PRG_TEND(JL, IRSDRYG)+PRG_TEND(JL, IRRDRYG)
ENDDO
!$acc end kernels
!Freezing rate and growth mode
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRGT(JL)>ICED%XRTMIN(6) .AND. LDCOMPUTE(JL)) THEN
!Freezing rate
......@@ -293,6 +310,7 @@ DO JL=1, KSIZE
LLDRYG(JL)=.FALSE.
ENDIF
ENDDO
!$acc end kernels
! Part of ZRWETG to be converted into hail
! Graupel can be produced by other processes instantaneously (inducing a mixing ratio change, PRGSI_MR) or
......@@ -310,10 +328,14 @@ IF(KRR==7) THEN
END WHERE
!$mnh_end_expand_where(JL=1:KSIZE)
ELSE
!$acc kernels
PRWETGH(:)=0.
PRWETGH_MR(:)=0.
!$acc end kernels
ENDIF
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
!Aggregated minus collected
IF(LDWETG(JL)) THEN
......@@ -341,9 +363,12 @@ DO JL=1, KSIZE
PRSDRYG(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
!* 6.5 Melting of the graupeln
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRGT(JL)>ICED%XRTMIN(6) .AND. PT(JL)>CST%XTT .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -365,6 +390,7 @@ DO JL=1, KSIZE
PRGMLTR(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RG', 1, ZHOOK_HANDLE)
!
......
......@@ -108,6 +108,8 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH',0,ZHOOK_HANDLE)
!
!* 7.2 compute the Wet and Dry growth of hail
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRHT(JL)>ICED%XRTMIN(7) .AND. PRCT(JL)>ICED%XRTMIN(2) .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -129,10 +131,13 @@ DO JL=1, KSIZE
PRH_TEND(JL, IRIDRYH)=0.
ENDIF
ENDDO
!$acc end kernels
!
!* 7.2.1 accretion of aggregates on the hailstones
!
!$acc kernels
!$acc loop independent
DO JL = 1, KSIZE
IF (PRHT(JL)>ICED%XRTMIN(7) .AND. PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL)) THEN
GWET(JL) = .TRUE.
......@@ -142,6 +147,7 @@ DO JL = 1, KSIZE
PRH_TEND(JL, IRSDRYH)=0.
ENDIF
ENDDO
!$acc end kernels
IF(.NOT. LDSOFT) THEN
CALL INTERP_MICRO_2D(KPROMA, KSIZE, PLBDAH(:), PLBDAS(:), ICEP%NWETLBDAH, ICEP%NWETLBDAS, &
&ICEP%XWETINTP1H, ICEP%XWETINTP2H, ICEP%XWETINTP1S, ICEP%XWETINTP2S, &
......@@ -174,6 +180,8 @@ ENDIF
!
!* 7.2.6 accretion of graupeln on the hailstones
!
!$acc kernels
!$acc loop independent
DO JL = 1, KSIZE
IF (PRHT(JL)>ICED%XRTMIN(7) .AND. PRGT(JL)>ICED%XRTMIN(6) .AND. LDCOMPUTE(JL)) THEN
GWET(JL) = .TRUE.
......@@ -183,6 +191,7 @@ DO JL = 1, KSIZE
PRH_TEND(JL, IRGDRYH)=0.
END IF
ENDDO
!$acc end kernels
IF(.NOT. LDSOFT) THEN
CALL INTERP_MICRO_2D(KPROMA, KSIZE, PLBDAH(:), PLBDAG(:), ICEP%NWETLBDAH, ICEP%NWETLBDAG, &
&ICEP%XWETINTP1H, ICEP%XWETINTP2H, ICEP%XWETINTP1G, ICEP%XWETINTP2G, &
......@@ -210,6 +219,8 @@ ENDIF
!
!* 7.2.11 accretion of raindrops on the hailstones
!
!$acc kernels
!$acc loop independent
DO JL = 1, KSIZE
IF (PRHT(JL)>ICED%XRTMIN(7) .AND. PRRT(JL)>ICED%XRTMIN(3) .AND. LDCOMPUTE(JL)) THEN
GWET(JL) = .TRUE.
......@@ -218,6 +229,7 @@ DO JL = 1, KSIZE
PRH_TEND(JL, IRRWETH)=0.
ENDIF
ENDDO
!$acc end kernels
IF(.NOT. LDSOFT) THEN
CALL INTERP_MICRO_2D(KPROMA, KSIZE, PLBDAH(:), PLBDAR(:), ICEP%NWETLBDAH, ICEP%NWETLBDAR, &
&ICEP%XWETINTP1H, ICEP%XWETINTP2H, ICEP%XWETINTP1R, ICEP%XWETINTP2R, &
......@@ -238,15 +250,20 @@ IF(.NOT. LDSOFT) THEN
ENDIF
ENDIF
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
ZRDRYH_INIT(JL)=PRH_TEND(JL, IRCWETH)+PRH_TEND(JL, IRIDRYH)+ &
&PRH_TEND(JL, IRSDRYH)+PRH_TEND(JL, IRRWETH)+PRH_TEND(JL, IRGDRYH)
ENDDO
!$acc end kernels
!
!* 7.3 compute the Wet growth of hail
! and
!* 7.4 Select Wet or Dry case
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRHT(JL)>ICED%XRTMIN(7) .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -294,6 +311,7 @@ DO JL=1, KSIZE
LLDRYH(JL)=.FALSE.
ENDIF
ENDDO
!$acc end kernels
IF(PARAMI%LCONVHG)THEN
!$mnh_expand_where(JL=1:KSIZE)
......@@ -304,9 +322,13 @@ IF(PARAMI%LCONVHG)THEN
END WHERE
!$mnh_end_expand_where(JL=1:KSIZE)
ELSE
!$acc kernels
ZRDRYHG(:)=0.
!$acc end kernels
ENDIF
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(LLWETH(JL)) THEN
PRCWETH(JL) = PRH_TEND(JL, IRCWETH)
......@@ -341,9 +363,12 @@ DO JL=1, KSIZE
PRDRYHG(JL) = 0.
ENDIF
ENDDO
!$acc end kernels
!
!* 7.5 Melting of the hailstones
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRHT(JL)>ICED%XRTMIN(7) .AND. PT(JL)>CST%XTT .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -364,6 +389,7 @@ DO JL=1, KSIZE
PRHMLTR(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH', 1, ZHOOK_HANDLE)
!
......
......@@ -67,6 +67,7 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RI',0,ZHOOK_HANDLE)
!
!* 7.2 Bergeron-Findeisen effect: RCBERI
!
!$acc kernels
DO JL=1, KSIZE
IF(PSSI(JL)>0. .AND. PRCT(JL)>ICED%XRTMIN(2) .AND. PRIT(JL)>ICED%XRTMIN(4) &
.AND. PCIT(JL)>1.E-20 .AND. LDCOMPUTE(JL)) THEN
......@@ -79,6 +80,7 @@ DO JL=1, KSIZE
PRCBERI(JL) = 0.
ENDIF
ENDDO
!$acc end kernels
!
IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RI', 1, ZHOOK_HANDLE)
!
......
......@@ -102,6 +102,8 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RS', 0, ZHOOK_HANDLE)
!
!* 5.0 maximum freezing rate
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -135,9 +137,12 @@ DO JL=1, KSIZE
ZFREEZ_RATE(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
!* 5.1 cloud droplet riming of the aggregates
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF (PRCT(JL)>ICED%XRTMIN(2) .AND. PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL)) THEN
#if defined(REPRO48)
......@@ -153,6 +158,7 @@ DO JL=1, KSIZE
PRS_TEND(JL, IRSRIMCG)=0.
ENDIF
ENDDO
!$acc end kernels
!
! Collection of cloud droplets by snow: this rate is used for riming (T<0) and for conversion/melting (T>0)
IF(.NOT. LDSOFT) THEN
......@@ -225,11 +231,15 @@ IF(.NOT. LDSOFT) THEN
END WHERE
!$mnh_end_expand_where(JL=1:KSIZE)
ELSE
!$acc kernels
PRS_TEND(:, IRSRIMCG)=0.
!$acc end kernels
END IF
ENDIF
ENDIF
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
! More restrictive RIM mask to be used for riming by negative temperature only
IF(GRIM(JL) .AND. PT(JL)<CST%XTT) THEN
......@@ -248,9 +258,12 @@ DO JL=1, KSIZE
PRSRIMCG(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
!* 5.2 rain accretion onto the aggregates
!
!$acc kernels
!$acc loop independent
DO JL = 1, KSIZE
IF (PRRT(JL)>ICED%XRTMIN(3) .AND. PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL)) THEN
GACC(JL) = .TRUE.
......@@ -261,10 +274,13 @@ DO JL = 1, KSIZE
PRS_TEND(JL, IRSACCRG)=0.
END IF
ENDDO
!$acc end kernels
IF(.NOT. LDSOFT) THEN
!$acc kernels
PRS_TEND(:, IRRACCS)=0.
PRS_TEND(:, IRRACCSS)=0.
PRS_TEND(:, IRSACCRG)=0.
!$acc end kernels
CALL INTERP_MICRO_2D(KPROMA, KSIZE, PLBDAS, PLBDAR, ICEP%NACCLBDAS, ICEP%NACCLBDAR, &
&ICEP%XACCINTP1S, ICEP%XACCINTP2S, ICEP%XACCINTP1R, ICEP%XACCINTP2R,&
&PARAMI%LPACK_INTERP, GACC(:), IBUF1(:), IBUF2(:), IBUF3(:), ZBUF1(:), ZBUF2(:), ZBUF3(:), &
......@@ -321,6 +337,8 @@ IF(.NOT. LDSOFT) THEN
ENDIF
ENDIF
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
! More restrictive ACC mask to be used for accretion by negative temperature only
IF(GACC(JL) .AND. PT(JL)<CST%XTT) THEN
......@@ -339,10 +357,13 @@ DO JL=1, KSIZE
PRSACCRG(JL)=0.
ENDIF
ENDDO
!$acc end kernels
!
!
!* 5.3 Conversion-Melting of the aggregates
!
!$acc kernels
!$acc loop independent
DO JL=1, KSIZE
IF(PRST(JL)>ICED%XRTMIN(5) .AND. PT(JL)>CST%XTT .AND. LDCOMPUTE(JL)) THEN
IF(.NOT. LDSOFT) THEN
......@@ -388,7 +409,7 @@ DO JL=1, KSIZE
PRCMLTSR(JL)=0.
ENDIF
ENDDO
!$acc end kernels
IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RS', 1, ZHOOK_HANDLE)
!
CONTAINS
......
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