Skip to content
Snippets Groups Projects
lima_snow_deposition.f90 5.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier
    
    !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
    
    !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
    
    !MNH_LIC for details. version 1.
    
    !-----------------------------------------------------------------
    
    !      #####################
           MODULE MODI_LIMA_SNOW_DEPOSITION
    !      #####################
    !
    INTERFACE
          SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                         &
                                           PRHODREF, PSSI, PAI, PCJ, PLSFACT, &
                                           PRST, PLBDS,                       &
                                           P_RI_CNVI, P_CI_CNVI,              &
                                           P_TH_DEPS, P_RS_DEPS               )
    !
    LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
    !
    REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
    REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
    REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
    REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
    REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
    !
    REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
    !
    REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
    !
    
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_CNVI
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_CNVI
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_DEPS
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_DEPS
    
    !
    END SUBROUTINE LIMA_SNOW_DEPOSITION
    END INTERFACE
    END MODULE MODI_LIMA_SNOW_DEPOSITION
    !
    !     ##########################################################################
    SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                                &
                                     PRHODREF,  PSSI, PAI, PCJ, PLSFACT,       &
                                     PRST, PLBDS,                              &
                                     P_RI_CNVI, P_CI_CNVI,                     &
                                     P_TH_DEPS, P_RS_DEPS                      )
    !     ##########################################################################
    !
    !!    PURPOSE
    !!    -------
    !!      The purpose of this routine is to compute the microphysical sources
    !!    for slow cold processes :
    !!      - conversion of snow to ice
    !!      - deposition of vapor on snow
    !!      - conversion of ice to snow (Harrington 1995)
    !!
    !!
    !!    AUTHOR
    !!    ------
    !!      J.-M. Cohard     * Laboratoire d'Aerologie*
    !!      J.-P. Pinty      * Laboratoire d'Aerologie*
    !!      S.    Berthet    * Laboratoire d'Aerologie*
    !!      B.    Vié        * CNRM *
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original             15/03/2018
    !!
    !-------------------------------------------------------------------------------
    !
    !*       0.    DECLARATIONS
    !              ------------
    !
    USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS 
    USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, &
                                     XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
                                     XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
                                     XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS,  &
                                     XDICNVS_LIM, XLBDAICNVS_LIM,                 &
                                     XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS,      &
                                     XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2,      &
                                     XAGGS_RLARGE1, XAGGS_RLARGE2  
    
    !
    IMPLICIT NONE
    !
    !*       0.1   Declarations of dummy arguments :
    !
    LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
    !
    REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
    REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
    REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
    REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
    REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
    !
    REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
    !
    REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
    !
    
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_CNVI
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_CNVI
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_DEPS
    REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_DEPS
    
    !
    !*       0.2   Declarations of local variables :
    !
    LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMICRO ! Computations only where necessary
    REAL,    DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX ! Work array
    !
    !
    !-------------------------------------------------------------------------------
    !
    P_RI_CNVI(:) = 0.
    P_CI_CNVI(:) = 0.
    P_TH_DEPS(:) = 0.
    P_RS_DEPS(:) = 0.
    !
    ! Physical limitations
    !
    !
    ! Looking for regions where computations are necessary
    !
    GMICRO(:) = LDCOMPUTE(:) .AND. PRST(:)>XRTMIN(5)
    !
    !
    WHERE( GMICRO )
    !
    !*       2.1    Conversion of snow to r_i: RSCNVI
    !        ----------------------------------------
    !
    !
       ZZW2(:) = 0.0
       ZZW(:) = 0.0
       WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) &
                                       .AND. (PSSI(:)<0.0)       )
          ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS)
          ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
    !
          ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
    !
          ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) )
       END WHERE
    !
       P_RI_CNVI(:) = ZZW(:)
       P_CI_CNVI(:) = ZZW2(:)
    !
    !
    !*       2.2    Deposition of water vapor on r_s: RVDEPS
    !        -----------------------------------------------
    !
    !
       ZZW(:) = 0.0
       WHERE ( (PRST(:)>XRTMIN(5)) )
          ZZW(:) = ( PSSI(:)/(PAI(:)) ) * &
               ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS )
          ZZW(:) =    ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:)))
       END WHERE
    !
       P_RS_DEPS(:) = ZZW(:)
    !!$   P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:)
    ! 
    END WHERE
    !
    !
    END SUBROUTINE LIMA_SNOW_DEPOSITION