Skip to content
Snippets Groups Projects
Commit a6b8e99a authored by VIE Benoît's avatar VIE Benoît
Browse files

Bugfix SPLIT + LADJ=F in lima_adjust_split

parent 8bda69ee
No related branches found
No related tags found
No related merge requests found
...@@ -279,21 +279,10 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ...@@ -279,21 +279,10 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
ZRC, ZRC2, & ZRC, ZRC2, &
ZRI, & ZRI, &
Z_SIGS, Z_SRCS, & Z_SIGS, Z_SRCS, &
ZW_MF ZW_MF, &
LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ZCND, ZS, ZVEC1
:: GMICRO ! Test where to compute cond/dep proc. !
INTEGER :: IMICRO INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1
REAL, DIMENSION(:), ALLOCATABLE &
:: ZRVT, ZRCT, ZRIT, ZRVS, ZRCS, ZRIS, ZTHS, &
ZCCT, ZCIT, ZCCS, ZCIS, &
ZRHODREF, ZZT, ZPRES, ZEXNREF, ZZCPH, &
ZZW, ZLVFACT, ZLSFACT, &
ZRVSATW, ZRVSATI, ZRVSATW_PRIME, ZRVSATI_PRIME, &
ZAW, ZAI, ZCJ, ZKA, ZDV, ZITW, ZITI, ZAWW, ZAIW, &
ZAWI, ZAII, ZFACT, ZDELTW, &
ZDELTI, ZDELT1, ZDELT2, ZCND, ZDEP, ZS, ZVEC1, ZZW2
!
INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1
! !
INTEGER :: IRESP ! Return code of FM routines INTEGER :: IRESP ! Return code of FM routines
INTEGER :: IIU,IJU,IKU! dimensions of dummy arrays INTEGER :: IIU,IJU,IKU! dimensions of dummy arrays
...@@ -309,11 +298,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRTMIN ...@@ -309,11 +298,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRTMIN
REAL, DIMENSION(:), ALLOCATABLE :: ZCTMIN REAL, DIMENSION(:), ALLOCATABLE :: ZCTMIN
! !
integer :: idx integer :: idx
INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace the COUNT integer :: JI, JJ, JK, jl
INTEGER :: JL ! and PACK intrinsics
INTEGER :: JMOD, JMOD_IFN, JMOD_IMM INTEGER :: JMOD, JMOD_IFN, JMOD_IMM
! !
INTEGER , DIMENSION(3) :: BV
TYPE(TFIELDDATA) :: TZFIELD TYPE(TFIELDDATA) :: TZFIELD
LOGICAL :: G_SIGMAS, GUSERI LOGICAL :: G_SIGMAS, GUSERI
REAL :: Z_SIGQSAT REAL :: Z_SIGQSAT
...@@ -525,12 +512,13 @@ DO JITER =1,ITERMAX ...@@ -525,12 +512,13 @@ DO JITER =1,ITERMAX
Z_SIGQSAT=0. Z_SIGQSAT=0.
END IF END IF
CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', & IF (LADJ) THEN
HCONDENS, HLAMBDA3, & CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', &
PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, & HCONDENS, HLAMBDA3, &
Z_SIGS, PMFCONV, PCLDFR, Z_SRCS, GUSERI, G_SIGMAS, & PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, &
Z_SIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) Z_SIGS, PMFCONV, PCLDFR, Z_SRCS, GUSERI, G_SIGMAS, &
Z_SIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
END IF
IF (OSUBG_COND) THEN IF (OSUBG_COND) THEN
PSRCS=Z_SRCS PSRCS=Z_SRCS
ZW_MF=0. ZW_MF=0.
...@@ -544,18 +532,46 @@ END DO ...@@ -544,18 +532,46 @@ END DO
! !
!* 5.1 compute the sources !* 5.1 compute the sources
! !
! Rc - Rc* IF (LADJ) THEN
ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP ! Pcon = ---------- ! Rc - Rc*
! 2 Delta t ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP ! Pcon = ----------
WHERE( ZW1(:,:,:) < 0.0 ) ! 2 Delta t
ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) ) WHERE( ZW1(:,:,:) < 0.0 )
ELSEWHERE ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) )
ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) ) ELSEWHERE
END WHERE ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) )
PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) END WHERE
PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:)
PTHS(:,:,:) = PTHS(:,:,:) + & PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:)
PTHS(:,:,:) = PTHS(:,:,:) + &
ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
ELSE
DO JI=1,SIZE(PRCS,1)
DO JJ=1,SIZE(PRCS,2)
DO JK=1,SIZE(PRCS,3)
IF (PRCS(JI,JJ,JK).GE.XRTMIN(2) .AND. PCCS(JI,JJ,JK).GE.XCTMIN(2)) THEN
ZVEC1(JI,JJ,JK) = MAX( 1.0001, MIN( FLOAT(NAHEN)-0.0001, XAHENINTP1 * ZT(JI,JJ,JK) + XAHENINTP2 ) )
IVEC1(JI,JJ,JK) = INT( ZVEC1(JI,JJ,JK) )
ZVEC1(JI,JJ,JK) = ZVEC1(JI,JJ,JK) - FLOAT( IVEC1(JI,JJ,JK) )
ZW(JI,JJ,JK)=EXP( XALPW - XBETAW/ZT(JI,JJ,JK) - XGAMW*ALOG(ZT(JI,JJ,JK) ) ) ! es_w
ZW(JI,JJ,JK)=ZEPS*ZW(JI,JJ,JK) / ( PPABST(JI,JJ,JK)-ZW(JI,JJ,JK) )
ZS(JI,JJ,JK) = PRVS(JI,JJ,JK)*PTSTEP / ZW(JI,JJ,JK) - 1.
ZW(JI,JJ,JK) = PCCS(JI,JJ,JK)*PTSTEP/(XLBC*PCCS(JI,JJ,JK)/PRCS(JI,JJ,JK))**XLBEXC
ZW2(JI,JJ,JK) = XAHENG3(IVEC1(JI,JJ,JK)+1)*ZVEC1(JI,JJ,JK)-XAHENG3(IVEC1(JI,JJ,JK))*(ZVEC1(JI,JJ,JK)-1.)
ZCND(JI,JJ,JK) = 2.*3.14*1000.*ZW2(JI,JJ,JK)*ZS(JI,JJ,JK)*ZW(JI,JJ,JK)
IF(ZCND(JI,JJ,JK).LE.0.) THEN
ZCND(JI,JJ,JK) = MAX ( ZCND(JI,JJ,JK), -PRCS(JI,JJ,JK) )
ELSE
ZCND(JI,JJ,JK) = MIN ( ZCND(JI,JJ,JK), PRVS(JI,JJ,JK) )
END IF
PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) - ZCND(JI,JJ,JK)
PRCS(JI,JJ,JK) = PRCS(JI,JJ,JK) + ZCND(JI,JJ,JK)
PTHS(JI,JJ,JK) = PTHS(JI,JJ,JK) + ZCND(JI,JJ,JK) * ZLV(JI,JJ,JK) / (ZCPH(JI,JJ,JK) * PEXNREF(JI,JJ,JK))
END IF
END DO
END DO
END DO
END IF
! !
IF (NMOM_I.EQ.1) THEN IF (NMOM_I.EQ.1) THEN
ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP ! idem ZW1 but for Ri ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP ! idem ZW1 but for Ri
......
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