Skip to content
Snippets Groups Projects
mode_compute_updraft.F90 47.7 KiB
Newer Older
  • Learn to ignore specific revisions
  •                (1. - ZKIC_INIT)*PTHL_UP(JIJ)
        ZMIXRT(JIJ)  = ZKIC_INIT * &
                   (PRTM(JIJ,KK)+ZDZ*(PRTM(JIJ,KK+KKL)-PRTM(JIJ,KK))/PDZZ(JIJ,KK+KKL)) +   &
                   (1. - ZKIC_INIT)*PRT_UP(JIJ)
      ELSEIF(OTEST(JIJ)) THEN
        ZDZ=0.5*(PZZ(JIJ,KK+KKL)-PZZ(JIJ,KK))-ZDZ_STOP(JIJ)
        ZTHV(JIJ)= PTHVM(JIJ,KK)-ZCOEFF_MINUS_HALF(JIJ)*ZDZ
        ZMIXTHL(JIJ) = ZKIC_INIT * &
                   (PTHLM(JIJ,KK)-ZDZ*(PTHLM(JIJ,KK)-PTHLM(JIJ,JKLIM))/PDZZ(JIJ,KK)) + &
                   (1. - ZKIC_INIT)*PTHL_UP(JIJ)
        ZMIXRT(JIJ)  = ZKIC_INIT * &
                   (PRTM(JIJ,KK)-ZDZ*(PRTM(JIJ,KK)-PRTM(JIJ,JKLIM))/PDZZ(JIJ,KK)) + &
                   (1. - ZKIC_INIT)*PRT_UP(JIJ)
    
    CALL TH_R_FROM_THL_RT(CST,NEBN,D%NIJT,NEBN%CFRAC_ICE_SHALLOW_MF,ZFRAC_ICE,&
    
                 ZPRE,ZMIXTHL,ZMIXRT,&
                 ZTHMIX,ZRVMIX,PRC_MIX,PRI_MIX,&
                 ZRSATW_ED, ZRSATI_ED,OOCEAN=.FALSE.,&
    
                 PBUF=ZBUF, KB=D%NIJB, KE=D%NIJE)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE)
    ZTHVMIX(IIJB:IIJE) = ZTHMIX(IIJB:IIJE)*(1.+ZRVORD*ZRVMIX(IIJB:IIJE))/(1.+ZMIXRT(IIJB:IIJE))
    
    
    !  Compute cons then non cons. var. of mixture at the flux level KK+KKL  with initial ZKIC
    
    ZMIXTHL(IIJB:IIJE) = ZKIC_INIT * 0.5*(PTHLM(IIJB:IIJE,KK)+PTHLM(IIJB:IIJE,KK+KKL))+&
                           & (1. - ZKIC_INIT)*PTHL_UP(IIJB:IIJE)
    ZMIXRT(IIJB:IIJE)  = ZKIC_INIT * 0.5*(PRTM(IIJB:IIJE,KK)+PRTM(IIJB:IIJE,KK+KKL))+&
                           & (1. - ZKIC_INIT)*PRT_UP(IIJB:IIJE)
    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
    
    CALL TH_R_FROM_THL_RT(CST,NEBN,D%NIJT,NEBN%CFRAC_ICE_SHALLOW_MF,ZFRAC_ICE,&
    
                 PPRE_PLUS_HALF,ZMIXTHL,ZMIXRT,&
                 ZTHMIX,ZRVMIX,PRC_MIX,PRI_MIX,&
                 ZRSATW_ED, ZRSATI_ED,OOCEAN=.FALSE.,&
    
                 PBUF=ZBUF, KB=D%NIJB, KE=D%NIJE)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE)
    ZTHVMIX_F2(IIJB:IIJE) = ZTHMIX(IIJB:IIJE)*(1.+ZRVORD*ZRVMIX(IIJB:IIJE))/(1.+ZMIXRT(IIJB:IIJE))
    !$mnh_end_expand_array(JIJ=IIJB:IIJE)
    
    
    !Computation of mean ZKIC over the cloudy part
    
        ! Compute ZKIC at the bottom of cloudy part
        ! Thetav_up at bottom is equal to Thetav_up at flux level KK
    
        IF (ABS(PTHV_UP(JIJ)-ZTHVMIX(JIJ))<1.E-10) THEN
          ZKIC(JIJ)=1.
    
          ZKIC(JIJ) = MAX(0.,PTHV_UP(JIJ)-ZTHV(JIJ))*ZKIC_INIT /  &  
                     (PTHV_UP(JIJ)-ZTHVMIX(JIJ))
    
        IF (ABS(ZTHV_UP_F2(JIJ)-ZTHVMIX_F2(JIJ))<1.E-10) THEN
          ZKIC_F2(JIJ)=1.
    
          ZKIC_F2(JIJ) = MAX(0.,ZTHV_UP_F2(JIJ)-ZTHV_PLUS_HALF(JIJ))*ZKIC_INIT /  &  
                     (ZTHV_UP_F2(JIJ)-ZTHVMIX_F2(JIJ))
    
        ZKIC(JIJ)=MAX(MIN(0.5*(ZKIC(JIJ)+ZKIC_F2(JIJ)),1.),0.)
    
      END IF
    END DO
    
    !               3.3 Integration of PDF
    !                   According to Kain and Fritsch (1990), we replace delta Mt
    !                   in eq. (7) and (8) using eq. (5). Here we compute the ratio
    !                   of integrals without computing delta Me
    
    
    !Constant PDF
    !For this PDF, eq. (5) is delta Me=0.5*delta Mt
    
    DO JIJ=IIJB,IIJE
      IF(OTEST(JIJ)) THEN
        ZEPSI(JIJ) = ZKIC(JIJ)**2. !integration multiplied by 2
        ZDELTA(JIJ) = (1.-ZKIC(JIJ))**2. !idem
    
    !Triangular PDF
    !Calculus must be verified before activating this part, but in this state,
    !results on ARM case are almost identical
    !For this PDF, eq. (5) is also delta Me=0.5*delta Mt
    
    !  !Integration multiplied by 2
    !  WHERE(ZKIC<0.5)
    
    !    ZEPSI(IIJB:IIJE)=8.*ZKIC(IIJB:IIJE)**3/3.
    !    ZDELTA(IIJB:IIJE)=1.-4.*ZKIC(IIJB:IIJE)**2+8.*ZKIC(IIJB:IIJE)**3/3.
    
    !    ZEPSI(IIJB:IIJE)=5./3.-4*ZKIC(IIJB:IIJE)**2+8.*ZKIC(IIJB:IIJE)**3/3.
    !    ZDELTA(IIJB:IIJE)=8.*(1.-ZKIC(IIJB:IIJE))**3/3.
    
    DO JIJ=IIJB,IIJE
      IF(OTEST(JIJ)) THEN
        ZEPSI_CLOUD=MIN(ZDELTA(JIJ), ZEPSI(JIJ))
        PENTR_CLD(JIJ) = (1.-PPART_DRY(JIJ))*ZCOEFFMF_CLOUD*PRHODREF(JIJ)*ZEPSI_CLOUD
        PDETR_CLD(JIJ) = (1.-PPART_DRY(JIJ))*ZCOEFFMF_CLOUD*PRHODREF(JIJ)*ZDELTA(JIJ)
        PENTR(JIJ) = PENTR(JIJ)+PENTR_CLD(JIJ)
        PDETR(JIJ) = PDETR(JIJ)+PDETR_CLD(JIJ)
    
    END SUBROUTINE COMPUTE_UPDRAFT
    
    END MODULE MODE_COMPUTE_UPDRAFT