Skip to content
Snippets Groups Projects
Commit 3bf8ed0b authored by Gaelle TANGUY's avatar Gaelle TANGUY
Browse files

LIMA

parent 52011d70
No related branches found
No related tags found
No related merge requests found
Showing
with 11094 additions and 0 deletions
! ####################
MODULE MODI_INI_LIMA
! ####################
!
INTERFACE
SUBROUTINE INI_LIMA (PTSTEP, PDZMIN, KSPLITR, KSPLITG)
!
INTEGER, INTENT(OUT):: KSPLITR ! Number of small time step
! integration for rain
! sedimendation
INTEGER, INTENT(OUT):: KSPLITG ! Number of small time step
! integration for graupel
! sedimendation
REAL, INTENT(IN) :: PTSTEP ! Effective Time step
REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size
!
END SUBROUTINE INI_LIMA
!
END INTERFACE
!
END MODULE MODI_INI_LIMA
! ######################################################
SUBROUTINE INI_LIMA (PTSTEP, PDZMIN, KSPLITR, KSPLITG)
! ######################################################
!
!! PURPOSE
!! -------
!! The purpose of this routine is to initialize the constants used in the
!! microphysical scheme LIMA.
!!
!! AUTHOR
!! ------
!! J.-M. Cohard * Laboratoire d'Aerologie*
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! S. Berthet * Laboratoire d'Aerologie*
!! B. Vié * Laboratoire d'Aerologie*
!!
!! MODIFICATIONS
!! -------------
!! Original ??/??/13
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_REF
USE MODD_PARAM_LIMA
USE MODD_PARAMETERS
USE MODD_LUNIT
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
!
INTEGER, INTENT(OUT):: KSPLITR ! Number of small time step
! integration for rain
! sedimendation
INTEGER, INTENT(OUT):: KSPLITG ! Number of small time step
! integration for graupel or hail
! sedimendation
REAL, INTENT(IN) :: PTSTEP ! Effective Time step
REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size
!
!* 0.2 Declarations of local variables :
!
REAL :: ZT ! Work variable
REAL :: ZVTRMAX
!
INTEGER :: ILUOUT0 ! Logical unit number for output-listing
INTEGER :: IRESP ! Return code of FM-routines
!
!-------------------------------------------------------------------------------
!
!
!* 1. INIT OUTPUT LISTING, COMPUTE KSPLITR AND KSPLITG
! ------------------------------------------------
!
!
! Init output listing
CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
!
!
! KSPLITR
ZVTRMAX = 30. ! Maximum rain drop fall speed
!
KSPLITR = 1
SPLITR : DO
ZT = PTSTEP / FLOAT(KSPLITR)
IF ( ZT * ZVTRMAX / PDZMIN < 1.0) EXIT SPLITR
KSPLITR = KSPLITR + 1
END DO SPLITR
!
!
! KSPLITG
ZVTRMAX = 30.
IF( LHAIL ) THEN
ZVTRMAX = 60. ! Hail case
END IF
!
KSPLITG = 1
SPLITG : DO
ZT = 2.* PTSTEP / FLOAT(KSPLITG)
IF ( ZT * ZVTRMAX / PDZMIN .LT. 1.) EXIT SPLITG
KSPLITG = KSPLITG + 1
END DO SPLITG
!
!
!
IF (ALLOCATED(XRTMIN)) RETURN ! In case of nesting microphysics, constants of
! MODD_RAIN_C2R2_PARAM are computed only once.
!
!
! Set bounds for mixing ratios and concentrations
ALLOCATE( XRTMIN(7) )
XRTMIN(1) = 1.0E-20 ! rv
XRTMIN(2) = 1.0E-20 ! rc
!XRTMIN(3) = 1.0E-20 ! rr
XRTMIN(3) = 1.0E-17 ! rr
XRTMIN(4) = 1.0E-20 ! ri
XRTMIN(5) = 1.0E-15 ! rs
XRTMIN(6) = 1.0E-15 ! rg
XRTMIN(7) = 1.0E-15 ! rh
ALLOCATE( XCTMIN(7) )
XCTMIN(1) = 1.0 ! Not used
XCTMIN(2) = 1.0E+4 ! Nc
!XCTMIN(3) = 1.0E+1 ! Nr
XCTMIN(3) = 1.0E-3 ! Nr
XCTMIN(4) = 1.0E-3 ! Ni
XCTMIN(5) = 1.0E-3 ! Not used
XCTMIN(6) = 1.0E-3 ! Not used
XCTMIN(7) = 1.0E-3 ! Not used
!
!
! Air density fall speed correction
XCEXVT = 0.4
!
!------------------------------------------------------------------------------
!
!
!
!* 2. DEFINE SPECIES CHARACTERISTICS AND PROCESSES CONSTANTS
! ------------------------------------------------------
!
!
CALL INI_LIMA_WARM(PTSTEP, PDZMIN)
!
CALL INI_LIMA_COLD_MIXED(PTSTEP, PDZMIN)
!
!------------------------------------------------------------------------------
!
END SUBROUTINE INI_LIMA
This diff is collapsed.
! #########################
MODULE MODI_INI_LIMA_WARM
! #########################
!
INTERFACE
SUBROUTINE INI_LIMA_WARM (PTSTEP, PDZMIN)
!
REAL, INTENT(IN) :: PTSTEP ! Effective Time step
REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size
!
END SUBROUTINE INI_LIMA_WARM
!
END INTERFACE
!
END MODULE MODI_INI_LIMA_WARM
! #########################################
SUBROUTINE INI_LIMA_WARM (PTSTEP, PDZMIN)
! #########################################
!
!! PURPOSE
!! -------
!! The purpose of this routine is to initialize the constants used in the
!! microphysical scheme LIMA for the warm phase species and processes.
!!
!! AUTHOR
!! ------
!! J.-M. Cohard * Laboratoire d'Aerologie*
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! S. Berthet * Laboratoire d'Aerologie*
!! B. Vié * Laboratoire d'Aerologie*
!!
!! MODIFICATIONS
!! -------------
!! Original ??/??/13
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_REF
USE MODD_PARAM_LIMA
USE MODD_PARAM_LIMA_WARM
USE MODD_PARAMETERS
USE MODD_LUNIT
!
USE MODI_LIMA_FUNCTIONS
USE MODI_HYPGEO
USE MODI_GAMMA
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
REAL, INTENT(IN) :: PTSTEP ! Effective Time step
REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size
!
!* 0.2 Declarations of local variables :
!
INTEGER :: IKB ! Coordinates of the first and last physical
! points along z
INTEGER :: J1 ! Internal loop indexes
INTEGER :: JMOD ! Internal loop to index the CCN modes
!
REAL, DIMENSION(6) :: ZGAMC, ZGAMR ! parameters involving various moments of
! the generalized gamma law
!
REAL :: ZTT ! Temperature in Celsius
REAL :: ZLV ! Latent heat of vaporization
REAL :: ZSS ! Supersaturation
REAL :: ZPSI1, ZG ! Psi1 and G functions
REAL :: ZAHENR ! r_star (FH92)
REAL :: ZVTRMAX ! Raindrop maximal fall velocity
REAL :: ZRHO00 ! Surface reference air density
REAL :: ZSURF_TEN ! Water drop surface tension
REAL :: ZSMIN, ZSMAX ! Minimal and maximal supersaturation used to
! discretize the HYP functions
!
!
INTEGER :: ILUOUT0 ! Logical unit number for output-listing
INTEGER :: IRESP ! Return code of FM-routines
LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output
! listing
!
!-------------------------------------------------------------------------------
!
!
!* 1. CHARACTERISTICS OF THE SPECIES
! ------------------------------
!
!
!* 1.1 Cloud droplet characteristics
!
XAC = (XPI/6.0)*XRHOLW
XBC = 3.0
XCC = XRHOLW*XG/(18.0*1.816E-5) ! Stokes flow (Pruppacher p 322 for T=293K)
XCC = XRHOLW*XG/(18.0*1.7E-5) ! Stokes flow (Pruppacher p 322 for T=273K)
XDC = 2.0
!
XF0C = 1.00
XF2C = 0.108
!
XC1C = 1./2.
!
!* 1.2 Raindrops characteristics
!
XAR = (XPI/6.0)*XRHOLW
XBR = 3.0
XCR = 842.
XDR = 0.8
!
XF0R = 0.780
!Correction BVIE Pruppacher 1997 eq. 13-61
!XF1R = 0.265
XF1R = 0.308
!
!
!------------------------------------------------------------------------------
!
!
!* 2. DIMENSIONAL DISTRIBUTIONS OF THE SPECIES
! ----------------------------------------
!
!
!* 2.1 Cloud droplet distribution
!
!XALPHAC = 3.0 ! Gamma law of the Cloud droplet (here volume-like distribution)
!XNUC = 3.0 ! Gamma law with little dispersion
!
!* 2.2 Raindrop distribution
!
!XALPHAR = 3.0 ! Gamma law of the raindrops (here volume-like distribution)
!XNUR = 3.0 ! Gamma law for the raindrops
!XNUR = 0.1
!
!* 2.3 Precalculation of the gamma function momentum
!
!
ZGAMC(1) = GAMMA_X0D(XNUC)
ZGAMC(2) = MOMG(XALPHAC,XNUC,3.)
ZGAMC(3) = MOMG(XALPHAC,XNUC,6.)
ZGAMC(4) = ZGAMC(3)-ZGAMC(2)**2 ! useful for Sig_c
ZGAMC(5) = MOMG(XALPHAC,XNUC,9.)
ZGAMC(6) = MOMG(XALPHAC,XNUC,3.)**(2./3.)/MOMG(XALPHAC,XNUC,2.)
!
ZGAMR(1) = GAMMA_X0D(XNUR)
ZGAMR(2) = MOMG(XALPHAR,XNUR,3.)
ZGAMR(3) = MOMG(XALPHAR,XNUR,6.)
ZGAMR(4) = MOMG(XALPHAR,XNUR,6.)
ZGAMR(5) = MOMG(XALPHAR,XNUR,9.)
ZGAMR(6) = MOMG(XALPHAR,XNUR,3.)**(2./3.)/MOMG(XALPHAR,XNUR,2.)
!
!* 2.4 Csts for the shape parameter
!
XLBC = XAR*ZGAMC(2)
XLBEXC = 1.0/XBC
XLBR = XAR*ZGAMR(2)
XLBEXR = 1.0/XBR
!
!
!------------------------------------------------------------------------------
!
!
!* 3. CONSTANTS FOR THE SEDIMENTATION
! -------------------------------
!
!
!* 4.1 Exponent of the fall-speed air density correction
!
IKB = 1 + JPVEXT
ZRHO00 = XP00/(XRD*XTHVREFZ(IKB))
!
!* 4.2 Constants for sedimentation
!
XFSEDRR = XCR*GAMMA_X0D(XNUR+(XDR+3.)/XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR)* &
(ZRHO00)**XCEXVT
XFSEDCR = XCR*GAMMA_X0D(XNUR+XDR/XALPHAR)/GAMMA_X0D(XNUR)* &
(ZRHO00)**XCEXVT
XFSEDRC = XCC*GAMMA_X0D(XNUC+(XDC+3.)/XALPHAC)/GAMMA_X0D(XNUC+3./XALPHAC)* &
(ZRHO00)**XCEXVT
XFSEDCC = XCC*GAMMA_X0D(XNUC+XDC/XALPHAC)/GAMMA_X0D(XNUC)* &
(ZRHO00)**XCEXVT
!
!
!------------------------------------------------------------------------------
!
!
!* 4. CONSTANTS FOR THE NUCLEATION PROCESS
! ------------------------------------
!
!
XWMIN = 0.01 ! Minimal positive vertical velocity required
! for the activation process in Twomey and CPB scheme
XTMIN = -0.000278 ! Minimal cooling required 1K/h
!
XDIVA = 226.E-7 ! Diffusivity of water vapor in the air
XTHCO = 24.3E-3 ! Air thermal conductivity
!
! ( 8 Mw (Sigma)sw )3 Pi*Rho_l
! XCSTDCRIT = ( -------------- ) * --------
! ( 3 Ra Rhow ) 6
!
ZSURF_TEN = 76.1E-3 ! Surface tension of a water drop at T=0 C
XCSTDCRIT = (XPI/6.)*XRHOLW*( (8.0*ZSURF_TEN )/( 3.0*XRV*XRHOLW ) )**3
!
!
!
! 4.1 Tabulation of the hypergeometric functions in 'no units'
! --------------------------------------------------------
!
! In LIMA's nucleation parameterization,
! supersaturation is not in % : Smax=0.01 for a 1% supersaturation.
! This is accounted for in the modified Beta and C values.
!
! Here, we tabulate the
! F(mu,k/2, k/2+1 ,-Beta S**2) -> XHYPF12
! F(mu,k/2,(k+3)/2,-Beta S**2) -> XHYPF32 functions
! using a logarithmic scale for S
!
NHYP = 500 ! Number of points for the tabulation
ALLOCATE (XHYPF12( NHYP, NMOD_CCN ))
ALLOCATE (XHYPF32( NHYP, NMOD_CCN ))
!
ZSMIN = 1.0E-5 ! Minimum supersaturation set at 0.001 %
ZSMAX = 5.0E-2 ! Maximum supersaturation set at 5 %
XHYPINTP1 = FLOAT(NHYP-1)/LOG(ZSMAX/ZSMIN)
XHYPINTP2 = FLOAT(NHYP)-XHYPINTP1*LOG(ZSMAX)
!
DO JMOD = 1,NMOD_CCN
DO J1 = 1,NHYP
ZSS =ZSMAX*(ZSMIN/ZSMAX)**(FLOAT(NHYP-J1)/FLOAT(NHYP-1))
XHYPF12(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),&
0.5*XKHEN_MULTI(JMOD)+1.0,XBETAHEN_MULTI(JMOD),ZSS)
XHYPF32(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),&
0.5*XKHEN_MULTI(JMOD)+1.5,XBETAHEN_MULTI(JMOD),ZSS)
END DO
ENDDO
!
NAHEN = 81 ! Tabulation for each Kelvin degree in the range XTT-40 to XTT+40
XAHENINTP1 = 1.0
XAHENINTP2 = 0.5*FLOAT(NAHEN-1) - XTT
!
! Compute the tabulation of function of T :
!
! 1
! XAHENG = -----------------------
! XCSTHEN * G**(3/2)
!
! Compute constants for the calculation of Smax.
! XCSTHEN = 1/(rho_l 2 pi)
! PSI1
! PSI3
! T
! Lv
! G
!
ALLOCATE (XAHENG(NAHEN))
ALLOCATE (XPSI1(NAHEN))
ALLOCATE (XPSI3(NAHEN))
XCSTHEN = 1.0 / ( XRHOLW*2.0*XPI )
DO J1 = 1,NAHEN
ZTT = XTT + FLOAT(J1-(NAHEN-1)/2) ! T
ZLV = XLVTT+(XCPV-XCL)*(ZTT-XTT) ! Lv
XPSI1(J1) = (XG/(XRD*ZTT))*(XMV*ZLV/(XMD*XCPD*ZTT)-1.) ! Psi1
XPSI3(J1) = -1*XMV*ZLV/(XMD*XRD*(ZTT**2)) ! Psi3
ZG = 1./( XRHOLW*( (XRV*ZTT)/ & ! G
(XDIVA*EXP(XALPW-(XBETAW/ZTT)-(XGAMW*ALOG(ZTT)))) &
+ (ZLV/ZTT)**2/(XTHCO*XRV) ) )
XAHENG(J1) = XCSTHEN/(ZG)**(3./2.)
END DO
!-------------------------------------------------------------------------------
!
! Parameters used to initialise the droplet and drop concentration
! from the respective mixing ratios (used in RESTART_RAIN_C2R2)
!
! Droplet case
!
!!ALLOCATE(XCONCC_INI(SIZE(PNFS,1),SIZE(PNFS,2),SIZE(PNFS,3),SIZE(PNFS,4))) !NMOD_CCN))
!! XCONCC_INI(:,:,:,:) = 0.8 * PNFS(:,:,:,:) ! 80% of the maximum CCN conc. is assumed
!
! Raindrop case
!
XCONCR_PARAM_INI = (1.E7)**3/(XPI*XRHOLW) ! MP law with N_O=1.E7 m-1 is assumed
!
!
!------------------------------------------------------------------------------
!
!
!* 5. CONSTANTS FOR THE COALESCENCE PROCESSES
! ---------------------------------------
!
!
!* 6.1 Csts for the coalescence processes
!
XKERA1 = 2.59E15 ! From Long a1=9.44E9 cm-3 so XKERA1= 9.44E9*1E6*(PI/6)**2
XKERA2 = 3.03E3 ! From Long a2=5.78E3 so XKERA2= 5.78E3* (PI/6)
!
! Cst for the cloud droplet selfcollection process
!
XSELFC = XKERA1*ZGAMC(3)
!
! Cst for the autoconversion process
!
XAUTO1 = 6.25E18*(ZGAMC(2))**(1./3.)*SQRT(ZGAMC(4))
XAUTO2 = 0.5E6*(ZGAMC(4))**(1./6.)
XLAUTR = 2.7E-2
XLAUTR_THRESHOLD = 0.4
XITAUTR= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7
XITAUTR_THRESHOLD = 7.5
XCAUTR = 3.5E9
!
! Cst for the accretion process
!
XACCR1 = ZGAMR(2)**(1./3.)
XACCR2 = 5.0E-6
XACCR3 = 12.6E-4
XACCR4 = XAUTO2
XACCR5 = 3.5
XACCR6 = 1.2*XCAUTR
XACCR_CLARGE1 = XKERA2*ZGAMC(2)
XACCR_CLARGE2 = XKERA2*ZGAMR(2)
XACCR_RLARGE1 = XKERA2*ZGAMC(3)*XRHOLW*(XPI/6.0)
XACCR_RLARGE2 = XKERA2*ZGAMC(2)*ZGAMR(2)*XRHOLW*(XPI/6.0)
XACCR_CSMALL1 = XKERA1*ZGAMC(3)
XACCR_CSMALL2 = XKERA1*ZGAMR(3)
XACCR_RSMALL1 = XKERA1*ZGAMC(5)*XRHOLW*(XPI/6.0)
XACCR_RSMALL2 = XKERA1*ZGAMC(2)*ZGAMR(3)*XRHOLW*(XPI/6.0)
!
! Cst for the raindrop self-collection/breakup process
!
XSCBU2 = XKERA2*ZGAMR(2)
XSCBU3 = XKERA1*ZGAMR(3)
XSCBU_EFF1 = 0.6E-3
XSCBU_EFF2 = 2.0E-3
XSCBUEXP1 = -2500.0
!
!
!------------------------------------------------------------------------------
!
!
!* 6. CONSTANTS FOR THE "SONTANEOUS" BREAK-UP
! ---------------------------------------
!
!
XSPONBUD1 = 3.0E-3
XSPONBUD2 = 4.0E-3
XSPONBUD3 = 5.0E-3
XSPONCOEF2 = ((XSPONBUD3/XSPONBUD2)**3 - 1.0)/(XSPONBUD3-XSPONBUD1)**2
!
!
!------------------------------------------------------------------------------
!
!
!* 7. CONSTANTS FOR EVAPORATION PROCESS
! ---------------------------------------
!
!
X0CNDC = (4.0*XPI)*XC1C*XF0C*MOMG(XALPHAC,XNUC,1.)
X2CNDC = (4.0*XPI)*XC1C*XF2C*XCC*MOMG(XALPHAC,XNUC,XDC+2.0)
!
! Valeurs utiles pour le calcul de l'évaporation en fonction de N_r
!
!XEX0EVAR = -1.0
!XEX1EVAR = -1.0 - (XDR+1.0)*0.5
!XEX2EVAR = -0.5*XCEXVT
!
!X0EVAR = (2.0*XPI)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR)
!X1EVAR = (2.0*XPI)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5* &
! GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR)
!
!
! Valeurs utiles pour le calcul de l'évaporation en fonction de r_r
!
XEX0EVAR = 2.0
XEX1EVAR = 2.0 - (XDR+1.0)*0.5
XEX2EVAR = -0.5*XCEXVT
!
X0EVAR = (12.0)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR)
X1EVAR = (12.0)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5* &
GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR+3./XALPHAR)
!
!
!------------------------------------------------------------------------------
!
!
!* 8. SET-UP RADIATIVE PARAMETERS
! ---------------------------
!
!
! R_eff_c = XFREFFC * (rho*r_c/N_c)**(1/3)
!
!
XFREFFC = 0.5 * ZGAMC(6) * (1.0/XAC)**(1.0/3.0)
XFREFFR = 0.5 * ZGAMR(6) * (1.0/XAR)**(1.0/3.0)
!
! Coefficients used to compute reff when both cloud and rain are present
!
XCREC = 1.0/ (ZGAMC(6) * XAC**(2.0/3.0))
XCRER = 1.0/ (ZGAMR(6) * XAR**(2.0/3.0))
!
!
!------------------------------------------------------------------------------
!
!
!* 9. SOME PRINTS FOR CONTROL
! -----------------------
!
!
GFLAG = .TRUE.
IF (GFLAG) THEN
CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
WRITE(UNIT=ILUOUT0,FMT='(" Summary of the cloud particule characteristics")')
WRITE(UNIT=ILUOUT0,FMT='(" CLOUD")')
WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') &
XAR,XBR
WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') &
XCC,XDC
WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') &
XALPHAC,XNUC
WRITE(UNIT=ILUOUT0,FMT='(" RAIN")')
WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') &
XAR,XBR
WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') &
XCR,XDR
!!$ WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') &
!!$ XALPHAR,XNUR
!!$ WRITE(UNIT=ILUOUT0,FMT='(" Description of the nucleation spectrum")')
!!$ WRITE(UNIT=ILUOUT0,FMT='(" C=",E13.6," k=",E13.6)') XCHEN, XKHEN
!!$ WRITE(UNIT=ILUOUT0,FMT='(" Beta=",E13.6," MU=",E13.6)') XBETAHEN, XMUHEN
!!$ WRITE(UNIT=ILUOUT0,FMT='(" CCN max=",E13.6)') XCONC_CCN
END IF
!
!------------------------------------------------------------------------------
!
END SUBROUTINE INI_LIMA_WARM
!######################################
MODULE MODI_INIT_AEROSOL_CONCENTRATION
!######################################
!
INTERFACE INIT_AEROSOL_CONCENTRATION
SUBROUTINE INIT_AEROSOL_CONCENTRATION(PRHODREF, PSVT, PZZ)
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF !Air Density [kg/m**3]
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT !Particles Concentration [/m**3]
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z)
!
END SUBROUTINE INIT_AEROSOL_CONCENTRATION
END INTERFACE INIT_AEROSOL_CONCENTRATION
!
END MODULE MODI_INIT_AEROSOL_CONCENTRATION
!
! ##########################################################
SUBROUTINE INIT_AEROSOL_CONCENTRATION(PRHODREF, PSVT, PZZ)
! ##########################################################
!!
!! PURPOSE
!! -------
!! Define the aerosol distributions
!!
!!
!! MODD_BLANK :
!! CDUMMY2 : CCN ou IFN pour le panache
!! NDUMMY1 : hauteur base du panache
!! NDUMMY2 : hauteur sommet du panache
!! XDUMMY8 : Concentration du panache (N/cm3 pour des CCN, N/L pour des IFN)
!!
!!
!! AUTHOR
!! ------
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! S. Berthet * Laboratoire d'Aerologie*
!! B. Vié * Laboratoire d'Aerologie*
!!
!! MODIFICATIONS
!! -------------
!! Original ??/??/13
!! Modification 01/2016 (JP Pinty) Add LIMA
!!
!!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_NSV
USE MODD_PARAM_n, ONLY : CCLOUD
USE MODD_PARAM_LIMA, ONLY : LWARM, LACTI, NMOD_CCN, LSCAV, LAERO_MASS, &
XCCN_CONC, LCCN_HOM, &
LCOLD, LNUCL, NMOD_IFN, LMEYERS, &
XIFN_CONC, LIFN_HOM
USE MODD_PARAMETERS, ONLY : JPVEXT
USE MODD_BLANK, ONLY : CDUMMY2, NDUMMY1, NDUMMY2, XDUMMY8
!
IMPLICIT NONE
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF !Air Density [kg/m**3]
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT !Particles Concentration
![particles/kg of dry air]
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z)
!
! Local variables
INTEGER :: JMOD_IFN
INTEGER :: JSV, JINIT
INTEGER :: IKB, IKE
!
!-------------------------------------------------------------------------------
!
!
!*initialization of N_FREE_CCN/N_ACTIVATED_CCN et N_FREE_IN/N_ACTIVATED_IN
!
!
IF ( LWARM .AND. LACTI ) THEN
DO JSV = NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI+NMOD_CCN-1
PSVT(:,:,:,JSV) = 0.0
ENDDO
IKB = 1+JPVEXT
IKE = SIZE(PSVT,3)-JPVEXT
!
! Initialisation des concentrations en CCN
!
!
IF (LCCN_HOM) THEN
! concentration homogène (en nombre par m3) sur la verticale
DO JSV = 1, NMOD_CCN
PSVT(:,:,IKB:IKE,NSV_LIMA_CCN_FREE+JSV-1) = &
XCCN_CONC(JSV)*1.0E6 / PRHODREF(:,:,IKB:IKE)
END DO
ELSE
! concentration décroissante selon z
DO JSV = 1, NMOD_CCN
WHERE (PZZ(:,:,:) .LE. 1000.)
PSVT(:,:,:,NSV_LIMA_CCN_FREE+JSV-1) = XCCN_CONC(JSV)*1.0E6 / PRHODREF(:,:,:)
ELSEWHERE (PZZ(:,:,:) .LE. 10000.)
PSVT(:,:,:,NSV_LIMA_CCN_FREE+JSV-1) = XCCN_CONC(JSV)*1.0E6 &
/ PRHODREF(:,:,:) * EXP(-LOG(XCCN_CONC(JSV)/0.01)*PZZ(:,:,:)/10000.)
ELSEWHERE
PSVT(:,:,:,NSV_LIMA_CCN_FREE+JSV-1) = 0.01*1.0E6 / PRHODREF(:,:,:)
ENDWHERE
END DO
ENDIF
END IF ! LWARM AND LACTI
!
! Initialisation des concentrations en IFN
!
IF ( LCOLD .AND. LNUCL .AND. (.NOT. LMEYERS) ) THEN
DO JSV = NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL+NMOD_IFN-1
PSVT(:,:,:,JSV) = 0.0
ENDDO
IKB = 1+JPVEXT
IKE = SIZE(PSVT,3)-JPVEXT
!
IF (LIFN_HOM) THEN
! concentration homogène (en nombre par m3) sur la verticale
DO JSV = 1, NMOD_IFN
PSVT(:,:,IKB:IKE,NSV_LIMA_IFN_FREE+JSV-1) = &
XIFN_CONC(JSV)*1.0E3 / PRHODREF(:,:,IKB:IKE)
END DO
ELSE
! concentration décroissante selon z
DO JSV = 1, NMOD_IFN
WHERE (PZZ(:,:,:) .LE. 1000.)
PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = XIFN_CONC(JSV)*1.0E3 / PRHODREF(:,:,:)
ELSEWHERE (PZZ(:,:,:) .LE. 10000.)
PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = XIFN_CONC(JSV)*1.0E3 &
/ PRHODREF(:,:,:) * EXP(-LOG(XIFN_CONC(JSV)/1.)*PZZ(:,:,:)/10000.)
ELSEWHERE
PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = 1*1.0E3 / PRHODREF(:,:,:)
ENDWHERE
END DO
ENDIF
END IF ! LCOLD AND LNUCL AND NOT LMEYERS
!
!
! Cas d'un panache de "pollution", concentration homogène dans le panache :
!
SELECT CASE (CDUMMY2)
CASE ('CCN')
PSVT(:,:,:,NSV_LIMA_CCN_FREE+NMOD_CCN-1)=0.
WHERE ( (PZZ(:,:,:) .GE. NDUMMY1) .AND. (PZZ(:,:,:) .LE. NDUMMY2) ) &
PSVT(:,:,:,NSV_LIMA_CCN_FREE+NMOD_CCN-1)=XDUMMY8*1.0E6 / PRHODREF(:,:,:)
CASE ('IFN')
PSVT(:,:,:,NSV_LIMA_IFN_FREE+NMOD_IFN-1)=0.
WHERE ( (PZZ(:,:,:) .GE. NDUMMY1) .AND. (PZZ(:,:,:) .LE. NDUMMY2) ) &
PSVT(:,:,:,NSV_LIMA_IFN_FREE+NMOD_IFN-1)=XDUMMY8*1.0E3 / PRHODREF(:,:,:)
END SELECT
!
!
END SUBROUTINE INIT_AEROSOL_CONCENTRATION
! #############################################################
SUBROUTINE INIT_AEROSOL_PROPERTIES
! #############################################################
!!
!!
!! PURPOSE
!! -------
!!
!! Define the aerosol properties
!!
!!
!! AUTHOR
!! ------
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! S. Berthet * Laboratoire d'Aerologie*
!! B. Vié * Laboratoire d'Aerologie*
!!
!! MODIFICATIONS
!! -------------
!! Original ??/??/13
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_PARAM_n, ONLY : CCLOUD
USE MODD_LUNIT, ONLY : CLUOUT0
USE MODD_PARAM_LIMA, ONLY : LWARM, LACTI, NMOD_CCN, HINI_CCN, HTYPE_CCN, &
XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN, &
XKHEN_MULTI, XMUHEN_MULTI, XBETAHEN_MULTI, &
XLIMIT_FACTOR, CCCN_MODES, LSCAV, &
XACTEMP_CCN, XFSOLUB_CCN, &
LCOLD, LNUCL, NMOD_IFN, NSPECIE, CIFN_SPECIES, &
XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, XFRAC, XFRAC_REF, &
CINT_MIXING, NMOD_IMM, NINDICE_CCN_IMM, NIMM, &
NPHILLIPS
!
USE MODI_GAMMA
!
IMPLICIT NONE
!
REAL :: XKHEN0
REAL :: XLOGSIG0
REAL :: XALPHA1
REAL :: XMUHEN0
REAL :: XALPHA2
REAL :: XBETAHEN0
REAL :: XR_MEAN0
REAL :: XALPHA3
REAL :: XALPHA4
REAL :: XALPHA5
REAL :: XACTEMP0
REAL :: XALPHA6
!
REAL, DIMENSION(6) :: XKHEN_TMP = (/1.56, 1.56, 1.56, 1.56, 1.56, 1.56 /)
REAL, DIMENSION(6) :: XMUHEN_TMP = (/0.80, 0.80, 0.80, 0.80, 0.80, 0.80 /)
REAL, DIMENSION(6) :: XBETAHEN_TMP= (/136., 136., 136., 136., 136., 136. /)
!
REAL, DIMENSION(3) :: RCCN
REAL, DIMENSION(3) :: LOGSIGCCN
REAL, DIMENSION(3) :: RHOCCN
!
INTEGER :: I,J,JMOD
!
INTEGER :: ILUOUT0 ! Logical unit number for output-listing
INTEGER :: IRESP ! Return code of FM-routines
!
!-------------------------------------------------------------------------------
!
CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
!
!!!!!!!!!!!!!!!!
! CCN properties
!!!!!!!!!!!!!!!!
!
IF ( NMOD_CCN .GE. 1 ) THEN
!
IF (.NOT.(ALLOCATED(XR_MEAN_CCN))) ALLOCATE(XR_MEAN_CCN(NMOD_CCN))
IF (.NOT.(ALLOCATED(XLOGSIG_CCN))) ALLOCATE(XLOGSIG_CCN(NMOD_CCN))
IF (.NOT.(ALLOCATED(XRHO_CCN))) ALLOCATE(XRHO_CCN(NMOD_CCN))
!
SELECT CASE (CCCN_MODES)
CASE ('JUNGFRAU')
RCCN(:) = (/ 0.02E-6 , 0.058E-6 , 0.763E-6 /)
LOGSIGCCN(:) = (/ 0.28 , 0.57 , 0.34 /)
RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
CASE ('COPT')
RCCN(:) = (/ 0.125E-6 , 0.4E-6 , 1.0E-6 /)
LOGSIGCCN(:) = (/ 0.69 , 0.41 , 0.47 /)
RHOCCN(:) = (/ 1000. , 1000. , 1000. /)
CASE ('MACC')
RCCN(:) = (/ 0.4E-6 , 0.25E-6 , 0.1E-6 /)
LOGSIGCCN(:) = (/ 0.64 , 0.47 , 0.47 /)
RHOCCN(:) = (/ 2160. , 2000. , 1750. /)
CASE ('MACC_JPP')
! sea-salt, sulfate, hydrophilic (GADS data)
RCCN(:) = (/ 0.209E-6 , 0.0695E-6 , 0.0212E-6 /)
LOGSIGCCN(:) = (/ 0.708 , 0.708 , 0.806 /)
RHOCCN(:) = (/ 2200. , 1700. , 1800. /)
CASE ('SIRTA')
RCCN(:) = (/ 0.153E-6 , 0.058E-6 , 0.763E-6 /)
LOGSIGCCN(:) = (/ 0.846 , 0.57 , 0.34 /)
RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
CASE ('CPS00')
RCCN(:) = (/ 0.0218E-6 , 0.058E-6 , 0.763E-6 /)
LOGSIGCCN(:) = (/ 1.16 , 0.57 , 0.34 /)
RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
CASE DEFAULT
! d'après Jaenicke 1993, aerosols troposphere libre, masse volumique typique
RCCN(:) = (/ 0.0035E-6 , 0.125E-6 , 0.26E-6 /)
LOGSIGCCN(:) = (/ 0.645 , 0.253 , 0.425 /)
RHOCCN(:) = (/ 1000. , 1000. , 1000. /)
ENDSELECT
!
DO I=1, MIN(NMOD_CCN,3)
XR_MEAN_CCN(I) = RCCN(I)
XLOGSIG_CCN(I) = LOGSIGCCN(I)
XRHO_CCN(I) = RHOCCN(I)
END DO
!
IF (NMOD_CCN .EQ. 4) THEN
! default values as coarse sea salt mode
XR_MEAN_CCN(4) = 1.75E-6
XLOGSIG_CCN(4) = 0.708
XRHO_CCN(4) = 2200.
END IF
!
!
! Compute CCN spectra parameters from CCN characteristics
!
!* INPUT : XBETAHEN_TEST is in 'percent' and XBETAHEN_MULTI in 'no units',
! XK... and XMU... are invariant
!
IF (.NOT.(ALLOCATED(XKHEN_MULTI))) ALLOCATE(XKHEN_MULTI(NMOD_CCN))
IF (.NOT.(ALLOCATED(XMUHEN_MULTI))) ALLOCATE(XMUHEN_MULTI(NMOD_CCN))
IF (.NOT.(ALLOCATED(XBETAHEN_MULTI))) ALLOCATE(XBETAHEN_MULTI(NMOD_CCN))
IF (.NOT.(ALLOCATED(XLIMIT_FACTOR))) ALLOCATE(XLIMIT_FACTOR(NMOD_CCN))
!
IF (HINI_CCN == 'CCN'.AND. (.NOT. LSCAV) ) THEN
! Numerical initialization without dependence on AP physical properties
100 DO JMOD = 1, NMOD_CCN
XKHEN_MULTI(JMOD) = XKHEN_TMP(JMOD)
XMUHEN_MULTI(JMOD) = XMUHEN_TMP(JMOD)
XBETAHEN_MULTI(JMOD) = XBETAHEN_TMP(JMOD)*(100.)**2
! no units relative to smax
XLIMIT_FACTOR(JMOD) = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.)&
*GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) ) &
/( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD)) &
*GAMMA_X0D(XMUHEN_MULTI(JMOD)) ) ! N/C
END DO
ELSE IF (HINI_CCN == 'CCN'.AND. LSCAV ) THEN
! Attention !
WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization &
not depending on the aerosol properties, however you need it for &
scavenging. &
With LSCAV = true, HINI_CCN should be set to AER for consistency")')
go to 100
ELSE IF (HINI_CCN == 'AER') THEN
!
! Initialisation depending on aerosol physical properties
!
! First, computing k, mu, beta, and XLIMIT_FACTOR as in CPS2000 (eqs 9a-9c)
!
! XLIMIT_FACTOR replaces C, because C depends on the CCN number concentration
! which is therefore determined at each grid point and time step as
! Nccn / XLIMIT_FACTOR
!
DO JMOD = 1, NMOD_CCN
!
SELECT CASE (HTYPE_CCN(JMOD))
CASE ('M') ! CCN marins
XKHEN0 = 3.251
XLOGSIG0 = 0.4835
XALPHA1 = -1.297
XMUHEN0 = 2.589
XALPHA2 = -1.511
XBETAHEN0 = 621.689
XR_MEAN0 = 0.133E-6
XALPHA3 = 3.002
XALPHA4 = 1.081
XALPHA5 = 1.0
XACTEMP0 = 290.16
XALPHA6 = 2.995
CASE ('C') ! CCN continentaux
XKHEN0 = 1.403
XLOGSIG0 = 1.16
XALPHA1 = -1.172
XMUHEN0 = 0.834
XALPHA2 = -1.350
XBETAHEN0 = 25.499
XR_MEAN0 = 0.0218E-6
XALPHA3 = 3.057
XALPHA4 = 4.092
XALPHA5 = 1.011
XACTEMP0 = 290.16
XALPHA6 = 3.076
CASE DEFAULT
WRITE(UNIT=ILUOUT0,FMT='("You must specify HTYPE_CNN(JMOD)=C or M &
in EXSEG1.nam for each CCN mode")')
CALL ABORT
ENDSELECT
!
XKHEN_MULTI(JMOD) = XKHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA1
XMUHEN_MULTI(JMOD) = XMUHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA2
XBETAHEN_MULTI(JMOD)=XBETAHEN0*(XR_MEAN_CCN(JMOD)/XR_MEAN0)**XALPHA3 &
* EXP( XALPHA4*((XLOGSIG_CCN(JMOD)/XLOGSIG0)-1.) ) &
* XFSOLUB_CCN**XALPHA5 &
* (XACTEMP_CCN/XACTEMP0)**XALPHA6
XLIMIT_FACTOR(JMOD) = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.) &
*GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) ) &
/( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD)) &
*GAMMA_X0D(XMUHEN_MULTI(JMOD)) )
ENDDO
!
! These parameters are correct for a nucleation spectra
! Nccn(Smax) = C Smax^k F(mu,k/2,1+k/2,-beta Smax^2)
! with Smax expressed in % (Smax=1 for a supersaturation of 1%).
!
! All the computations in LIMA are done for an adimensional Smax (Smax=0.01 for
! a 1% supersaturation). So beta and C (XLIMIT_FACTOR) are changed :
! new_beta = beta * 100^2
! new_C = C * 100^k (ie XLIMIT_FACTOR = XLIMIT_FACTOR / 100^k)
!
XBETAHEN_MULTI(:) = XBETAHEN_MULTI(:) * 10000
XLIMIT_FACTOR(:) = XLIMIT_FACTOR(:) / (100**XKHEN_MULTI(:))
END IF
END IF ! NMOD_CCN > 0
!
!!!!!!!!!!!!!!!!
! IFN properties
!!!!!!!!!!!!!!!!
!
IF ( NMOD_IFN .GE. 1 ) THEN
SELECT CASE (CIFN_SPECIES)
CASE ('MACC_JPP')
! sea-salt, sulfate, hydrophilic (GADS data)
! 2 species, dust-metallic and hydrophobic (as BC)
! (Phillips et al. 2013 and GADS data)
NSPECIE = 4 ! DM1, DM2, BC, BIO+(O)
IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE))
XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.025E-6, 0.2E-6/)
XSIGMA_IFN = (/2.0, 2.15, 2.0, 1.6 /)
XRHO_IFN = (/2600., 2600., 1000., 1500./)
CASE DEFAULT
IF (NPHILLIPS == 8) THEN
! 4 species, according to Phillips et al. 2008
NSPECIE = 4
IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE))
XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.2E-6, 0.2E-6/)
XSIGMA_IFN = (/1.9, 1.6, 1.6, 1.6 /)
XRHO_IFN = (/2300., 2300., 1860., 1500./)
ELSE IF (NPHILLIPS == 13) THEN
! 4 species, according to Phillips et al. 2013
NSPECIE = 4
IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE))
XMDIAM_IFN = (/0.8E-6, 3.0E-6, 90.E-9, 0.163E-6/)
XSIGMA_IFN = (/1.9, 1.6, 1.6, 2.54 /)
XRHO_IFN = (/2300., 2300., 1860., 1000./)
END IF
ENDSELECT
!
! internal mixing
!
IF (.NOT.(ALLOCATED(XFRAC))) ALLOCATE(XFRAC(NSPECIE,NMOD_IFN))
XFRAC(:,:)=0.
SELECT CASE (CINT_MIXING)
CASE ('DM1')
XFRAC(1,:)=1.
CASE ('DM2')
XFRAC(2,:)=1.
CASE ('BC')
XFRAC(3,:)=1.
CASE ('O')
XFRAC(4,:)=1.
CASE ('MACC')
XFRAC(1,1)=0.99
XFRAC(2,1)=0.01
XFRAC(3,1)=0.
XFRAC(4,1)=0.
XFRAC(1,2)=0.
XFRAC(2,2)=0.
XFRAC(3,2)=0.5
XFRAC(4,2)=0.5
CASE ('MACC_JPP')
XFRAC(1,1)=1.0
XFRAC(2,1)=0.0
XFRAC(3,1)=0.0
XFRAC(4,1)=0.0
XFRAC(1,2)=0.0
XFRAC(2,2)=0.0
XFRAC(3,2)=0.5
XFRAC(4,2)=0.5
CASE DEFAULT
XFRAC(1,:)=0.6
XFRAC(2,:)=0.009
XFRAC(3,:)=0.33
XFRAC(4,:)=0.06
ENDSELECT
!
! Phillips 08 alpha (table 1)
IF (.NOT.(ALLOCATED(XFRAC_REF))) ALLOCATE(XFRAC_REF(4))
IF (NPHILLIPS == 13) THEN
XFRAC_REF(1)=0.66
XFRAC_REF(2)=0.66
XFRAC_REF(3)=0.31
XFRAC_REF(4)=0.03
ELSE IF (NPHILLIPS == 8) THEN
XFRAC_REF(1)=0.66
XFRAC_REF(2)=0.66
XFRAC_REF(3)=0.28
XFRAC_REF(4)=0.06
END IF
!
! Immersion modes
!
IF (.NOT.(ALLOCATED(NIMM))) ALLOCATE(NIMM(NMOD_CCN))
NIMM(:)=0
IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM)
ALLOCATE(NINDICE_CCN_IMM(MAX(1,NMOD_IMM)))
IF (NMOD_IMM .GE. 1) THEN
DO J = 0, NMOD_IMM-1
NIMM(NMOD_CCN-J)=1
NINDICE_CCN_IMM(NMOD_IMM-J) = NMOD_CCN-J
END DO
! ELSE IF (NMOD_IMM == 0) THEN ! PNIS existe mais vaut 0, pour l'appel à resolved_cloud
! NMOD_IMM = 1
! NINDICE_CCN_IMM(1) = 0
END IF
!
END IF ! NMOD_IFN > 0
!
END SUBROUTINE INIT_AEROSOL_PROPERTIES
This diff is collapsed.
! #####################
MODULE MODI_LIMA_COLD
! #####################
!
INTERFACE
SUBROUTINE LIMA_COLD (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, &
HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ, &
PRHODREF, PEXNREF, PPABST, PW_NU, &
PTHM, PPABSM, &
PTHT, PRT, PSVT, &
PTHS, PRS, PSVS, &
PINPRS, PINPRG, PINPRH)
!
LOGICAL, INTENT(IN) :: OSEDI ! switch to activate the
! cloud ice sedimentation
LOGICAL, INTENT(IN) :: OHHONI ! enable haze freezing
INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step
! for ice sedimendation
REAL, INTENT(IN) :: PTSTEP ! Time step
INTEGER, INTENT(IN) :: KMI ! Model index
!
CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file
CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Output-listing name for
! model n
LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of
! the tput FM fileoutp
INTEGER, INTENT(IN) :: KRR ! Number of moist variables
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density
REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function
REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t
REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for
! the nucleation param.
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-dt
REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t
REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t
REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t
!
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source
!
REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip
REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip
REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip
!
END SUBROUTINE LIMA_COLD
END INTERFACE
END MODULE MODI_LIMA_COLD
!
! ######################################################################
SUBROUTINE LIMA_COLD (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, &
HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ, &
PRHODREF, PEXNREF, PPABST, PW_NU, &
PTHM, PPABSM, &
PTHT, PRT, PSVT, &
PTHS, PRS, PSVS, &
PINPRS, PINPRG, PINPRH)
! ######################################################################
!
!!
!! PURPOSE
!! -------
!! The purpose of this routine is to compute the cold-phase
!! microphysical sources involving only primary ice and snow, except for
!! the sedimentation which also includes graupelns, and the homogeneous
!! freezing of CCNs, cloud droplets and raindrops.
!!
!!
!!** METHOD
!! ------
!! The nucleation of IFN is parameterized following either Meyers (1992)
!! or Phillips (2008, 2013).
!!
!! The sedimentation rates are computed with a time spliting technique:
!! an upstream scheme, written as a difference of non-advective fluxes.
!! This source term is added to the next coming time step (split-implicit
!! process).
!!
!!
!! REFERENCES
!! ----------
!!
!! Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm
!! microphysical bulk scheme.
!! Part I: Description and tests
!! Part II: 2D experiments with a non-hydrostatic model
!! Accepted for publication in Quart. J. Roy. Meteor. Soc.
!!
!! Phillips et al., 2008: An empirical parameterization of heterogeneous
!! ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci.
!!
!! AUTHOR
!! ------
!! J.-M. Cohard * Laboratoire d'Aerologie*
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! S. Berthet * Laboratoire d'Aerologie*
!! B. Vié * Laboratoire d'Aerologie*
!!
!!
!! MODIFICATIONS
!! -------------
!! Original ??/??/13
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
USE MODD_NSV
USE MODD_PARAM_LIMA
!
USE MODI_LIMA_COLD_SEDIMENTATION
USE MODI_LIMA_MEYERS
USE MODI_LIMA_PHILLIPS
USE MODI_LIMA_COLD_HOM_NUCL
USE MODI_LIMA_COLD_SLOW_PROCESSES
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
LOGICAL, INTENT(IN) :: OSEDI ! switch to activate the
! cloud ice sedimentation
LOGICAL, INTENT(IN) :: OHHONI ! enable haze freezing
INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step
! for ice sedimendation
REAL, INTENT(IN) :: PTSTEP ! Time step
INTEGER, INTENT(IN) :: KMI ! Model index
!
CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file
CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Output-listing name for
! model n
LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of
! the tput FM fileoutp
INTEGER, INTENT(IN) :: KRR ! Number of moist variables
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density
REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function
REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t
REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for
! the nucleation param.
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-dt
REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t
REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t
REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at t
!
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations source
!
REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip
REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip
REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip
!
!* 0.2 Declarations of local variables :
!
REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) &
:: PRVT, & ! Water vapor m.r. at t
PRCT, & ! Cloud water m.r. at t
PRRT, & ! Rain water m.r. at t
PRIT, & ! Cloud ice m.r. at t
PRST, & ! Snow/aggregate m.r. at t
PRGT, & ! Graupel m.r. at t
PRHT, & ! Graupel m.r. at t
!
PRVS, & ! Water vapor m.r. source
PRCS, & ! Cloud water m.r. source
PRRS, & ! Rain water m.r. source
PRIS, & ! Pristine ice m.r. source
PRSS, & ! Snow/aggregate m.r. source
PRGS, & ! Graupel/hail m.r. source
PRHS, & ! Graupel/hail m.r. source
!
PCCT, & ! Cloud water C. at t
PCRT, & ! Rain water C. at t
PCIT, & ! Ice crystal C. at t
!
PCCS, & ! Cloud water C. source
PCRS, & ! Rain water C. source
PCIS ! Ice crystal C. source
!
REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNFS ! CCN C. available source
!used as Free ice nuclei for
!HOMOGENEOUS nucleation of haze
REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNAS ! Cloud C. nuclei C. source
!used as Free ice nuclei for
!IMMERSION freezing
REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PIFS ! Free ice nuclei C. source
!for DEPOSITION and CONTACT
REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PINS ! Activated ice nuclei C. source
!for DEPOSITION and CONTACT
REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNIS ! Activated ice nuclei C. source
!for IMMERSION
REAL, DIMENSION(:,:,:), ALLOCATABLE :: PNHS ! Haze homogeneous activation
!
!-------------------------------------------------------------------------------
!
!
!* 0. 3D MICROPHYSCAL VARIABLES
! -------------------------
!
!
! Prepare 3D water mixing ratios
PRVT(:,:,:) = PRT(:,:,:,1)
PRVS(:,:,:) = PRS(:,:,:,1)
!
PRCT(:,:,:) = 0.
PRCS(:,:,:) = 0.
PRRT(:,:,:) = 0.
PRRS(:,:,:) = 0.
PRIT(:,:,:) = 0.
PRIS(:,:,:) = 0.
PRST(:,:,:) = 0.
PRSS(:,:,:) = 0.
PRGT(:,:,:) = 0.
PRGS(:,:,:) = 0.
PRHT(:,:,:) = 0.
PRHS(:,:,:) = 0.
!
IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRT(:,:,:,2)
IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2)
IF ( KRR .GE. 3 ) PRRT(:,:,:) = PRT(:,:,:,3)
IF ( KRR .GE. 3 ) PRRS(:,:,:) = PRS(:,:,:,3)
IF ( KRR .GE. 4 ) PRIT(:,:,:) = PRT(:,:,:,4)
IF ( KRR .GE. 4 ) PRIS(:,:,:) = PRS(:,:,:,4)
IF ( KRR .GE. 5 ) PRST(:,:,:) = PRT(:,:,:,5)
IF ( KRR .GE. 5 ) PRSS(:,:,:) = PRS(:,:,:,5)
IF ( KRR .GE. 6 ) PRGT(:,:,:) = PRT(:,:,:,6)
IF ( KRR .GE. 6 ) PRGS(:,:,:) = PRS(:,:,:,6)
IF ( KRR .GE. 7 ) PRHT(:,:,:) = PRT(:,:,:,7)
IF ( KRR .GE. 7 ) PRHS(:,:,:) = PRS(:,:,:,7)
!
! Prepare 3D number concentrations
PCCT(:,:,:) = 0.
PCRT(:,:,:) = 0.
PCIT(:,:,:) = 0.
PCCS(:,:,:) = 0.
PCRS(:,:,:) = 0.
PCIS(:,:,:) = 0.
!
IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
!
IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
!
IF ( NMOD_CCN .GE. 1 ) THEN
ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
ELSE
ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
PNFS(:,:,:,:) = 0.
PNAS(:,:,:,:) = 0.
END IF
!
IF ( NMOD_IFN .GE. 1 ) THEN
ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
PINS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
ELSE
ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
PIFS(:,:,:,:) = 0.
PINS(:,:,:,:) = 0.
END IF
!
IF ( NMOD_IMM .GE. 1 ) THEN
ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IMM) )
PNIS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
ELSE
ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
PNIS(:,:,:,:) = 0.0
END IF
!
IF ( OHHONI ) THEN
ALLOCATE( PNHS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) )
PNHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE)
ELSE
ALLOCATE( PNHS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) )
PNHS(:,:,:) = 0.0
END IF
!
!-------------------------------------------------------------------------------
!
!
!* 1. COMPUTE THE SEDIMENTATION (RS) SOURCE
! -------------------------------------
!
CALL LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI, &
HFMFILE, HLUOUT, OCLOSE_OUT, &
PZZ, PRHODJ, PRHODREF, &
PRIT, PCIT, &
PRIS, PRSS, PRGS, PRHS, PCIS, &
PINPRS, PINPRG,&
PINPRH )
!-------------------------------------------------------------------------------
!
!
! COMPUTE THE NUCLEATION PROCESS SOURCES
! --------------------------------------
!
IF (LNUCL) THEN
!
IF ( LMEYERS ) THEN
PIFS(:,:,:,:) = 0.0
PNIS(:,:,:,:) = 0.0
CALL LIMA_MEYERS (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, &
PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PCCT, &
PTHS, PRVS, PRCS, PRIS, &
PCCS, PCIS, PINS )
ELSE
CALL LIMA_PHILLIPS (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, &
PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
PTHS, PRVS, PRCS, PRIS, &
PCIT, PCCS, PCIS, &
PNAS, PIFS, PINS, PNIS )
END IF
!
IF (LWARM) THEN
CALL LIMA_COLD_HOM_NUCL (OHHONI, PTSTEP, KMI, &
HFMFILE, HLUOUT, OCLOSE_OUT, PZZ, PRHODJ, &
PRHODREF, PEXNREF, PPABST, PW_NU, &
PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
PTHS, PRVS, PRCS, PRRS, PRIS, PRGS, &
PCCT, &
PCCS, PCRS, PNFS, &
PCIS, PNIS, PNHS )
END IF
!
END IF
!
!------------------------------------------------------------------------------
!
!
!* 4. SLOW PROCESSES: depositions, aggregation
! ----------------------------------------
!
IF (LSNOW) THEN
!
CALL LIMA_COLD_SLOW_PROCESSES(PTSTEP, KMI, HFMFILE, HLUOUT, &
OCLOSE_OUT, PZZ, PRHODJ, &
PRHODREF, PEXNREF, PPABST, &
PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
PTHS, PRVS, PRIS, PRSS, &
PCIT, PCIS )
!
END IF
!
!------------------------------------------------------------------------------
!
!
!* 4. REPORT 3D MICROPHYSICAL VARIABLES IN PRS AND PSVS
! -------------------------------------------------
!
PRS(:,:,:,1) = PRVS(:,:,:)
IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:)
IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
IF ( KRR .GE. 4 ) PRS(:,:,:,4) = PRIS(:,:,:)
IF ( KRR .GE. 5 ) PRS(:,:,:,5) = PRSS(:,:,:)
IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:)
IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
!
! Prepare 3D number concentrations
!
IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
IF ( LWARM .AND. LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
IF ( LCOLD ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
!
IF ( NMOD_CCN .GE. 1 ) THEN
PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
END IF
!
IF ( NMOD_IFN .GE. 1 ) THEN
PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
END IF
!
IF ( NMOD_IMM .GE. 1 ) THEN
PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
END IF
IF ( OHHONI ) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = PNHS(:,:,:)
!
!++cb++
IF (ALLOCATED(PNFS)) DEALLOCATE(PNFS)
IF (ALLOCATED(PNAS)) DEALLOCATE(PNAS)
IF (ALLOCATED(PIFS)) DEALLOCATE(PIFS)
IF (ALLOCATED(PINS)) DEALLOCATE(PINS)
IF (ALLOCATED(PNIS)) DEALLOCATE(PNIS)
IF (ALLOCATED(PNHS)) DEALLOCATE(PNHS)
!--cb--
!
!-------------------------------------------------------------------------------
!
END SUBROUTINE LIMA_COLD
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
! #####################################
MODULE MODI_LIMA_MIXED_SLOW_PROCESSES
! #####################################
!
INTERFACE
SUBROUTINE LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, &
ZLSFACT, ZLVFACT, ZAI, ZCJ, &
ZRGT, ZCIT, &
ZRVS, ZRCS, ZRIS, ZRGS, ZTHS, &
ZCCS, ZCIS, ZIFS, ZINS, &
ZLBDAI, ZLBDAG, &
ZRHODJ, GMICRO, PRHODJ, KMI, &
PTHS, PRVS, PRCS, PRIS, PRGS, &
PCCS, PCIS )
!
REAL, DIMENSION(:), INTENT(IN) :: ZRHODREF ! RHO Dry REFerence
REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature
REAL, DIMENSION(:), INTENT(IN) :: ZSSI ! Supersaturation over ice
!
REAL, DIMENSION(:), INTENT(IN) :: ZLSFACT ! L_s/(Pi_ref*C_ph)
REAL, DIMENSION(:), INTENT(IN) :: ZLVFACT ! L_v/(Pi_ref*C_ph)
REAL, DIMENSION(:), INTENT(IN) :: ZAI ! Thermodynamical function
REAL, DIMENSION(:), INTENT(IN) :: ZCJ ! for the ventilation coefficient
!
REAL, DIMENSION(:), INTENT(IN) :: ZRGT ! Graupel/hail m.r. at t
REAL, DIMENSION(:), INTENT(IN) :: ZCIT ! Pristine ice conc. at t
!
REAL, DIMENSION(:), INTENT(INOUT) :: ZRVS ! Water vapor m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZRCS ! Cloud water m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZRIS ! Pristine ice m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZRGS ! Graupel/hail m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZTHS ! Theta source
!
REAL, DIMENSION(:), INTENT(INOUT) :: ZCCS ! Cloud water conc. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZCIS ! Pristine ice conc. source
REAL, DIMENSION(:,:), INTENT(INOUT) :: ZIFS ! Free Ice nuclei conc. source
REAL, DIMENSION(:,:), INTENT(INOUT) :: ZINS ! Nucleated Ice nuclei conc. source
!
REAL, DIMENSION(:), INTENT(IN) :: ZLBDAI ! Slope parameter of the ice crystal distr.
REAL, DIMENSION(:), INTENT(IN) :: ZLBDAG ! Slope parameter of the graupel distr.
!
! used for budget storage
REAL, DIMENSION(:), INTENT(IN) :: ZRHODJ
LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: GMICRO
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
INTEGER, INTENT(IN) :: KMI
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRIS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PCCS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIS
!
END SUBROUTINE LIMA_MIXED_SLOW_PROCESSES
END INTERFACE
END MODULE MODI_LIMA_MIXED_SLOW_PROCESSES
!
! #######################################################################
SUBROUTINE LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, &
ZLSFACT, ZLVFACT, ZAI, ZCJ, &
ZRGT, ZCIT, &
ZRVS, ZRCS, ZRIS, ZRGS, ZTHS, &
ZCCS, ZCIS, ZIFS, ZINS, &
ZLBDAI, ZLBDAG, &
ZRHODJ, GMICRO, PRHODJ, KMI, &
PTHS, PRVS, PRCS, PRIS, PRGS, &
PCCS, PCIS )
! #######################################################################
!
!!
!! PURPOSE
!! -------
!! The purpose of this routine is to compute the mixed-phase
!! slow processes :
!!
!! Deposition of water vapor on graupeln
!! Cloud ice Melting
!! Bergeron-Findeisen effect
!!
!!** METHOD
!! ------
!!
!! REFERENCE
!! ---------
!!
!! Most of the parameterizations come from the ICE3 scheme, described in
!! the MESO-NH scientific documentation.
!!
!! Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm
!! microphysical bulk scheme.
!! Part I: Description and tests
!! Part II: 2D experiments with a non-hydrostatic model
!! Accepted for publication in Quart. J. Roy. Meteor. Soc.
!!
!! AUTHOR
!! ------
!! J.-M. Cohard * Laboratoire d'Aerologie*
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! S. Berthet * Laboratoire d'Aerologie*
!! B. Vié * Laboratoire d'Aerologie*
!!
!! MODIFICATIONS
!! -------------
!! Original ??/??/13
!! C. Barthe * LACy * jan. 2014 add budgets
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST, ONLY : XTT, XALPI, XBETAI, XGAMI, &
XALPW, XBETAW, XGAMW
USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, NMOD_IFN
USE MODD_PARAM_LIMA_COLD, ONLY : XDI, X0DEPI, X2DEPI, XSCFAC
USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBDAG_MAX, &
X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG
!
USE MODD_NSV
USE MODD_BUDGET
USE MODI_BUDGET
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
REAL, DIMENSION(:), INTENT(IN) :: ZRHODREF ! RHO Dry REFerence
REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature
REAL, DIMENSION(:), INTENT(IN) :: ZSSI ! Supersaturation over ice
!
REAL, DIMENSION(:), INTENT(IN) :: ZLSFACT ! L_s/(Pi_ref*C_ph)
REAL, DIMENSION(:), INTENT(IN) :: ZLVFACT ! L_v/(Pi_ref*C_ph)
REAL, DIMENSION(:), INTENT(IN) :: ZAI ! Thermodynamical function
REAL, DIMENSION(:), INTENT(IN) :: ZCJ ! for the ventilation coefficient
!
REAL, DIMENSION(:), INTENT(IN) :: ZRGT ! Graupel/hail m.r. at t
REAL, DIMENSION(:), INTENT(IN) :: ZCIT ! Pristine ice conc. at t
!
REAL, DIMENSION(:), INTENT(INOUT) :: ZRVS ! Water vapor m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZRCS ! Cloud water m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZRIS ! Pristine ice m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZRGS ! Graupel/hail m.r. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZTHS ! Theta source
!
REAL, DIMENSION(:), INTENT(INOUT) :: ZCCS ! Cloud water conc. source
REAL, DIMENSION(:), INTENT(INOUT) :: ZCIS ! Pristine ice conc. source
REAL, DIMENSION(:,:), INTENT(INOUT) :: ZIFS ! Free Ice nuclei conc. source
REAL, DIMENSION(:,:), INTENT(INOUT) :: ZINS ! Nucleated Ice nuclei conc. source
!
REAL, DIMENSION(:), INTENT(IN) :: ZLBDAI ! Slope parameter of the ice crystal distr.
REAL, DIMENSION(:), INTENT(IN) :: ZLBDAG ! Slope parameter of the graupel distr.
!
! used for budget storage
REAL, DIMENSION(:), INTENT(IN) :: ZRHODJ
LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: GMICRO
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
INTEGER, INTENT(IN) :: KMI
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRIS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PCCS
REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIS
!
!* 0.2 Declarations of local variables :
!
REAL, DIMENSION(SIZE(ZZT)) :: ZZW, ZMASK ! Work vectors
!
INTEGER :: JMOD_IFN
!
!-------------------------------------------------------------------------------
!
!* 1 Deposition of water vapor on r_g: RVDEPG
! ---------------------------------------------
!
!
ZZW(:) = 0.0
WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) )
!Correction BVIE RHODREF
! ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * &
ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) * &
( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG )
ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) &
- MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
ZRGS(:) = ZRGS(:) + ZZW(:)
ZRVS(:) = ZRVS(:) - ZZW(:)
ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
END WHERE
!
! Budget storage
IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
IF (LBUDGET_TH) CALL BUDGET ( &
UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
4,'DEPG_BU_RTH')
IF (LBUDGET_RV) CALL BUDGET ( &
UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
6,'DEPG_BU_RRV')
IF (LBUDGET_RG) CALL BUDGET ( &
UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
11,'DEPG_BU_RRG')
END IF
!
!
!* 2 cloud ice Melting: RIMLTC and CIMLTC
! -----------------------------------------
!
!
ZMASK(:) = 1.0
WHERE( (ZRIS(:)>0.0) .AND. (ZZT(:)>XTT) )
ZRCS(:) = ZRCS(:) + ZRIS(:)
ZTHS(:) = ZTHS(:) - ZRIS(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RIMLTC))
ZRIS(:) = 0.0
!
ZCCS(:) = ZCCS(:) + ZCIS(:)
ZCIS(:) = 0.0
ZMASK(:)= 0.0
END WHERE
DO JMOD_IFN = 1,NMOD_IFN
! Correction BVIE aerosols not released but in droplets
! ZIFS(:,JMOD_IFN) = ZIFS(:,JMOD_IFN) + ZINS(:,JMOD_IFN)*(1.-ZMASK(:))
ZINS(:,JMOD_IFN) = ZINS(:,JMOD_IFN) * ZMASK(:)
ENDDO
!
! Budget storage
IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
IF (LBUDGET_TH) CALL BUDGET ( &
UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
4,'IMLT_BU_RTH')
IF (LBUDGET_RC) CALL BUDGET ( &
UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
7,'IMLT_BU_RRC')
IF (LBUDGET_RI) CALL BUDGET ( &
UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
9,'IMLT_BU_RRI')
IF (LBUDGET_SV) THEN
CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
12+NSV_LIMA_NC,'IMLT_BU_RSV')
CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
12+NSV_LIMA_NI,'IMLT_BU_RSV')
END IF
END IF
!
!
!* 3 Bergeron-Findeisen effect: RCBERI
! --------------------------------------
!
!
ZZW(:) = 0.0
WHERE( (ZRCS(:)>0.0) .AND. (ZRIS(:)>0.0) .AND. (ZCIT(:)>XCTMIN(4)) )
ZZW(:) = EXP( (XALPW-XALPI) - (XBETAW-XBETAI)/ZZT(:) &
- (XGAMW-XGAMI)*ALOG(ZZT(:)) ) -1.0
! supersaturation of saturated water over ice
ZZW(:) = MIN( ZRCS(:),( ZZW(:) / ZAI(:) ) * ZCIT(:) * &
( X0DEPI/ZLBDAI(:)+X2DEPI*ZCJ(:)*ZCJ(:)/ZLBDAI(:)**(XDI+2.0) ) )
ZRCS(:) = ZRCS(:) - ZZW(:)
ZRIS(:) = ZRIS(:) + ZZW(:)
ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCBERI))
END WHERE
!
! Budget storage
IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
IF (LBUDGET_TH) CALL BUDGET ( &
UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
4,'BERFI_BU_RTH')
IF (LBUDGET_RC) CALL BUDGET ( &
UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
7,'BERFI_BU_RRC')
IF (LBUDGET_RI) CALL BUDGET ( &
UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
9,'BERFI_BU_RRI')
END IF
!
!------------------------------------------------------------------------------
!
END SUBROUTINE LIMA_MIXED_SLOW_PROCESSES
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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