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

Quentin 30/09/2024: add kernels rain_ice

parent 9e9a3379
No related branches found
No related tags found
No related merge requests found
......@@ -278,7 +278,7 @@ REAL, DIMENSION(D%NIJT,D%NKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air pr
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
INTEGER :: JIJ, JK
INTEGER :: JIJ, JK, JRR
INTEGER :: IKTB, IKTE, IKB, IIJB, IIJE
!
LOGICAL, DIMENSION(D%NIJT,D%NKT) :: LLMICRO ! mask to limit computation
......@@ -290,6 +290,7 @@ REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_LVFACT, ZZ_LSFACT
REAL :: ZINV_TSTEP ! Inverse ov PTSTEP
!For total tendencies computation
REAL, DIMENSION(D%NIJT,D%NKT,0:7) :: ZWR
REAL, DIMENSION(KRR) :: ZICEDRTMIN
!
REAL :: ZDEVIDE, ZRICE
!
......@@ -309,17 +310,24 @@ IKTE=D%NKTE
IKB=D%NKB
IIJB=D%NIJB
IIJE=D%NIJE
ZICEDRTMIN(1:KRR)=ICED%XRTMIN(1:KRR)
!-------------------------------------------------------------------------------
!
IF(OCND2) THEN
CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'OCND2 OPTION NOT CODED IN THIS RAIN_ICE VERSION')
END IF
!$acc kernels
ZINV_TSTEP=1./PTSTEP
!
! LSFACT and LVFACT without exner, and LLMICRO
! LLMICRO is a mask with a True value on points where microphysics is active
ZRSMIN(1:KRR) = ICED%XRTMIN(1:KRR) * ZINV_TSTEP
!$mnh_expand_array(JRR=1:KRR)
ZRSMIN(1:KRR) = ZICEDRTMIN(1:KRR) * ZINV_TSTEP
!$mnh_end_expand_array(JRR=1:JRR)
LLMICRO(:,:)=.FALSE.
!$acc end kernels
!$acc kernels
!$acc loop independent collapse(2)
DO JK = IKTB,IKTE
DO JIJ = IIJB,IIJE
!LSFACT and LVFACT
......@@ -350,6 +358,7 @@ DO JK = IKTB,IKTE
ENDIF
ENDDO
ENDDO
!$acc end kernels
!
!
!-------------------------------------------------------------------------------
......@@ -374,8 +383,9 @@ ENDIF
!* 3. INITIAL VALUES SAVING
! ---------------------
!
!$acc kernels
DO JK = IKTB,IKTE
!$mnh_expand_array(JIJ=1:D%NIJT)
!Copy of T variables to keep untouched the prognostic variables
ZWR(:,JK,ITH)=PTHT(:,JK)
ZWR(:,JK,IRV)=PRVT(:,JK)
......@@ -395,7 +405,9 @@ DO JK = IKTB,IKTE
PEVAP3D(:,JK)=0.
ENDIF
PRAINFR(:,JK)=0.
!$mnh_end_expand_array(JIJ=1:D%NIJT)
ENDDO
!$acc end kernels
!
!
!* 4. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF LLMICRO POINTS
......@@ -403,7 +415,9 @@ ENDDO
!
!The nucelation must be call everywhere
!This call is for points outside of the LLMICR mask, another call is coded in ice4_tendencies
!$acc kernels
LLW3D(:,:)=.FALSE.
!$acc loop independent collapse(2)
DO JK=IKTB,IKTE
DO JIJ=IIJB,IIJE
IF (.NOT. LLMICRO(JIJ, JK)) THEN
......@@ -415,16 +429,20 @@ DO JK=IKTB,IKTE
ENDIF
ENDDO
ENDDO
!$acc end kernels
CALL ICE4_NUCLEATION(CST, PARAMI, ICEP, ICED, D%NIJT*D%NKT, LLW3D(:,:), &
PTHT(:, :), PPABST(:, :), PRHODREF(:, :), &
PEXN(:, :), ZW3D(:, :), ZT(:, :), &
PRVT(:, :), &
PCIT(:, :), ZZ_RVHENI(:, :))
!$acc kernels
!$acc loop independent collapse(2)
DO JK = IKTB, IKTE
DO JIJ=IIJB, IIJE
ZZ_RVHENI(JIJ,JK) = MIN(PRVS(JIJ,JK), ZZ_RVHENI(JIJ,JK)/PTSTEP)
ENDDO
ENDDO
!$acc end kernels
!
!
!* 5. TENDENCIES COMPUTATION
......@@ -473,6 +491,8 @@ CALL ICE4_PACK(D, CST, PARAMI, ICEP, ICED, BUCONF, &
!
!*** 6.1 total tendencies limited by available species
!
!$acc kernels
!$acc loop independent collapse(2)
DO JK = IKTB, IKTE
DO CONCURRENT (JIJ=IIJB:IIJE)
!LV/LS
......@@ -509,6 +529,7 @@ DO JK = IKTB, IKTE
ENDIF
ENDDO
ENDDO
!$acc end kernels
!-------------------------------------------------------------------------------
!
!*** 6.2 Negative corrections
......@@ -565,6 +586,8 @@ IF(PARAMI%LSEDIM_AFTER) THEN
&PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR)
!"sedimentation" of rain fraction
!$acc kernels
!$acc loop independent collapse(2)
DO JK = IKTB, IKTE
DO JIJ=IIJB,IIJE
ZWR(JIJ,JK,IRR)=PRRS(JIJ,JK)*PTSTEP
......@@ -575,6 +598,7 @@ IF(PARAMI%LSEDIM_AFTER) THEN
ENDIF
ENDDO
ENDDO
!$acc end kernels
IF (PRESENT(PRHS)) THEN
CALL ICE4_RAINFR_VERT(D, ICED, PRAINFR, ZWR(:,:,IRR), &
&ZWR(:,:,IRS), ZWR(:,:,IRG), ZWR(:,:,IRH))
......@@ -592,14 +616,16 @@ ENDIF
IF (PARAMI%LDEPOSC) THEN !cloud water deposition on vegetation
IF (BUCONF%LBU_ENABLE .AND. BUCONF%LBUDGET_RC) &
& CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'DEPO', PRCS(:, :)*PRHODJ(:, :))
!$acc kernels
PINDEP(:)=0.
!DEC$ IVDEP
!$acc loop independent
DO JIJ = IIJB, IIJE
PINDEP(JIJ) = PARAMI%XVDEPOSC * PRCT(JIJ, IKB) * PRHODREF(JIJ, IKB) / CST%XRHOLW
PRCS(JIJ, IKB) = PRCS(JIJ, IKB) - PARAMI%XVDEPOSC * PRCT(JIJ, IKB) / PDZZ(JIJ, IKB)
PINPRC(JIJ) = PINPRC(JIJ) + PINDEP(JIJ)
ENDDO
!$acc end kernels
IF (BUCONF%LBU_ENABLE .AND. BUCONF%LBUDGET_RC) &
& CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'DEPO', PRCS(:, :)*PRHODJ(:, :))
......
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