Skip to content
Snippets Groups Projects
resolved_cloud.f90 58.2 KiB
Newer Older
  • Learn to ignore specific revisions
  •                      PRR=PRS(:,:,:,3)*PTSTEP,                                &
                         PRI=PRS(:,:,:,4)*PTSTEP, PRIS=PRS(:,:,:,4),             &
                         PRS=PRS(:,:,:,5)*PTSTEP,                                &
                         PRG=PRS(:,:,:,6)*PTSTEP,                                &
    
                         TBUDGETS=TBUDGETS,KBUDGETS=SIZE(TBUDGETS),              &
    
                         PRH=PRS(:,:,:,7)*PTSTEP,                                &
                         PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF,                   &
                         PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF                    )
        END IF
    
        deallocate( zexn )
    !           
    !
    !*       12.    2-MOMENT MIXED-PHASE MICROPHYSICAL SCHEME LIMA
    !               --------------------------------------------------------------
    !
    !
    !*       12.1   Compute the explicit microphysical sources
    !
      CASE ('LIMA')
         !
        DO JK=IKB,IKE
          ZDZZ(:,:,JK)=PZZ(:,:,JK+1)-PZZ(:,:,JK)    
        ENDDO
        ZZZ = MZF( PZZ )
         IF (LPTSPLIT) THEN
            CALL LIMA (1, IKU, 1,                                              &
                       PTSTEP, TPFILE,                                         &
                       PRHODREF, PEXNREF, ZDZZ,                                &
    
                       NMOD_CCN, NMOD_IFN, NMOD_IMM,                           &
                       PDTHRAD, PTHT, PRT,                                     &
                       PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT,          &
                       PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),       &
                       PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, &
    
                       PEVAP3D, PCLDFR, PICEFR, PRAINFR                        )
    
         ELSE
    
            IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI,       &
                                      TPFILE, KRR, PZZ, PRHODJ,                         &
    
                                      PRHODREF, PEXNREF, PW_ACT, PPABST,                &
                                      PDTHRAD,                                          &
    
                                      PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
                                      PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
                                      PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D         )
    !
            IF (LCOLD) CALL LIMA_COLD(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,               &
                                      KRR, PZZ, PRHODJ,                                  &
                                      PRHODREF, PEXNREF, PPABST, PW_ACT,                 &
                                      PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
                                      PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
                                      PINPRS, PINPRG, PINPRH                             )
    !
            IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,              &
                                                   KRR, PZZ, PRHODJ,                                 &
                                                   PRHODREF, PEXNREF, PPABST, PW_ACT,                &
                                                   PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
                                                   PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)  )
         ENDIF
    !
    !*       12.2   Perform the saturation adjustment
    !
       IF (LSPRO) THEN
        CALL LIMA_NOTADJUST (KMI, TPFILE, HRAD,                                      &
    
                             PTSTEP, PRHODJ, PPABSTT, PPABST, PRHODREF, PEXNREF, PZZ, &
    
                             PTHT,PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),        &
                             PTHS,PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),        &
    
        CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX, KRR, KMI, TPFILE, CCONDENS, CLAMBDA3,                     &
    
                         PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, PPABSTT, ZZZ,&
    
                         PDTHRAD, PW_ACT,                                                &
                         PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),                &
                         PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),                          &
    
                         PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF             )
    
       ELSE
        CALL LIMA_ADJUST(KRR, KMI, TPFILE,                                &
                         OSUBG_COND, PTSTEP,                              &
    
                         PRHODREF, PRHODJ, PEXNREF, PPABST, PPABSTT,      &
    
                         PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
                         PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),           &
    
                         PTHS, PSRCS, PCLDFR, PICEFR, PRAINFR             )
    
       ENDIF
    !
    END SELECT
    !
    IF(HCLOUD=='ICE3' .OR. HCLOUD=='ICE4' ) THEN
    
      PINPRC3D=ZFPR(:,:,:,2) / CST%XRHOLW
      PINPRR3D=ZFPR(:,:,:,3) / CST%XRHOLW
      PINPRS3D=ZFPR(:,:,:,5) / CST%XRHOLW
      PINPRG3D=ZFPR(:,:,:,6) / CST%XRHOLW
      IF(KRR==7) PINPRH3D=ZFPR(:,:,:,7) / CST%XRHOLW
    
      WHERE (PRT(:,:,:,2) > 1.E-04 )
        PSPEEDC=ZFPR(:,:,:,2) / (PRT(:,:,:,2) * PRHODREF(:,:,:))
      ENDWHERE
      WHERE (PRT(:,:,:,3) > 1.E-04 )
        PSPEEDR=ZFPR(:,:,:,3) / (PRT(:,:,:,3) * PRHODREF(:,:,:))
      ENDWHERE
      WHERE (PRT(:,:,:,5) > 1.E-04 )
        PSPEEDS=ZFPR(:,:,:,5) / (PRT(:,:,:,5) * PRHODREF(:,:,:))
      ENDWHERE
      WHERE (PRT(:,:,:,6) > 1.E-04 )
        PSPEEDG=ZFPR(:,:,:,6) / (PRT(:,:,:,6) * PRHODREF(:,:,:))
      ENDWHERE
      IF(KRR==7) THEN
        WHERE (PRT(:,:,:,7) > 1.E-04 )
          PSPEEDH=ZFPR(:,:,:,7) / (PRT(:,:,:,7) * PRHODREF(:,:,:))
        ENDWHERE
      ENDIF
    ENDIF
    
    ! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets
    call Sources_neg_correct( hcloud, 'NECON', krr, ptstep, ppabst, ptht, prt, pths, prs, psvs, prhodj )
    
    !-------------------------------------------------------------------------------
    !
    !
    !*      13.     SWITCH BACK TO THE PROGNOSTIC VARIABLES
    !               ---------------------------------------
    !
    PTHS(:,:,:) = PTHS(:,:,:) * PRHODJ(:,:,:)
    !
    DO JRR = 1,KRR
      PRS(:,:,:,JRR)  = PRS(:,:,:,JRR) * PRHODJ(:,:,:)
    END DO
    !
    IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
      DO JSV = ISVBEG, ISVEND
        PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) * PRHODJ(:,:,:)
      ENDDO
    ENDIF
    
    !-------------------------------------------------------------------------------
    !
    END SUBROUTINE RESOLVED_CLOUD