Skip to content
Snippets Groups Projects
resolved_cloud.f90 56.2 KiB
Newer Older
  • Learn to ignore specific revisions
  •                    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