Skip to content
Snippets Groups Projects
Commit 970d36f2 authored by Gaelle DELAUTIER's avatar Gaelle DELAUTIER
Browse files

S.Riette 15/5/2018: splitting of the ICE3/ICE4 routines for LRED=T

parent f428af66
Branches
Tags
No related merge requests found
Showing
with 5717 additions and 0 deletions
!MNH_LIC Copyright 1994-2014 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_ICE4_COMPUTE_PDF
INTERFACE
SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, &
PRHODREF, PRCT, PCF, PSIGMA_RC,&
PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, PRF)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KSIZE
CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV ! Kind of Subgrid autoconversion method
CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction
REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC ! Standard deviation of rc at time t
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid
! note that PCF = PHLC_HCF + PHLC_LCF
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid
! note that PRC = PHLC_HRC + PHLC_LRC
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRF ! Rain fraction
END SUBROUTINE ICE4_COMPUTE_PDF
END INTERFACE
END MODULE MODI_ICE4_COMPUTE_PDF
SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, &
PRHODREF, PRCT, PCF, PSIGMA_RC,&
PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, PRF)
!!
!!** PURPOSE
!! -------
!! Computes the pdf used to split cloud into high and low content parts
!!
!! AUTHOR
!! ------
!! S. Riette from the plitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
!
USE MODD_RAIN_ICE_DESCR
USE MODD_RAIN_ICE_PARAM
USE MODD_LUNIT_n, ONLY : TLUOUT
USE MODE_MSG
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV ! Kind of Subgrid autoconversion method
CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction
REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC ! Standard deviation of rc at time t
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid
! note that PCF = PHLC_HCF + PHLC_LCF
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid
! note that PRC = PHLC_HRC + PHLC_LRC
REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRF ! Rain fraction
!
!* 0.2 declaration of local variables
!
REAL, DIMENSION(SIZE(PRHODREF)) :: ZRCRAUTC, & !RC value to begin rain formation =XCRIAUTC/RHODREF
ZHLC_RCMAX, & !HLCLOUDS : maximum value for RC in distribution
ZHLC_LRCLOCAL, & !HLCLOUDS : LWC that is Low LWC local in LCF
ZHLC_HRCLOCAL !HLCLOUDS : LWC that is High LWC local in HCF
! note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
! = PHLC_HRC/HCF+ PHLC_LRC/LCF
REAL :: ZCOEFFRCM
INTEGER :: ILUOUT ! logical unit
!-------------------------------------------------------------------------------
!
ILUOUT = TLUOUT%NLU
!Cloud water split between high and low content part is done according to autoconversion option
ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
IF(HSUBG_AUCV=='NONE') THEN
!Cloud water is entirely in low or high part
WHERE(PRCT(:)>ZRCRAUTC(:))
PHLC_HCF(:)=1.
PHLC_LCF(:)=0.
PHLC_HRC(:)=PRCT(:)
PHLC_LRC(:)=0.
PRF(:) =1.
ELSEWHERE(PRCT(:)>XRTMIN(2))
PHLC_HCF(:)=0.
PHLC_LCF(:)=1.
PHLC_HRC(:)=0.
PHLC_LRC(:)=PRCT(:)
PRF(:) =0.
ELSEWHERE
PHLC_HCF(:)=0.
PHLC_LCF(:)=0.
PHLC_HRC(:)=0.
PHLC_LRC(:)=0.
PRF(:) =0.
END WHERE
ELSEIF(HSUBG_AUCV=='CLFR') THEN
!Cloud water is only in the cloudy part and entirely in low or high part
WHERE(PCF(:)>0.)
WHERE(PRCT(:)/PCF(:)>ZRCRAUTC(:))
PHLC_HCF(:)=PCF(:)
PHLC_LCF(:)=0.
PHLC_HRC(:)=PRCT(:)
PHLC_LRC(:)=0.
PRF(:) =PCF(:)
ELSEWHERE(PRCT(:)>XRTMIN(2))
PHLC_HCF(:)=0.
PHLC_LCF(:)=PCF(:)
PHLC_HRC(:)=0.0
PHLC_LRC(:)=PRCT(:)
PRF(:) =0.
ELSEWHERE
PHLC_HCF(:)=0.
PHLC_LCF(:)=0.
PHLC_HRC(:)=0.
PHLC_LRC(:)=0.
PRF(:) =0.
END WHERE
ELSEWHERE
PHLC_HCF(:)=0.
PHLC_LCF(:)=0.
PHLC_HRC(:)=0.
PHLC_LRC(:)=0.
PRF(:) =0.
END WHERE
ELSEIF(HSUBG_AUCV=='PDF ') THEN
!Cloud water is split between high and low part according to a PDF
! 'HLCRECTPDF' : rectangular PDF form
! 'HLCTRIANGPDF' : triangular PDF form
! 'HLCQUADRAPDF' : second order quadratic PDF form
! 'HLCISOTRIPDF' : isocele triangular PDF
! 'SIGM' : Redelsperger and Sommeria (1986)
IF(HSUBG_PR_PDF=='SIGM') THEN
! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012)
WHERE (PRCT(:)>ZRCRAUTC(:)+PSIGMA_RC(:))
PHLC_HCF(:)=1.
PHLC_LCF(:)=0.
PHLC_HRC(:)=PRCT(:)
PHLC_LRC(:)=0.
PRF(:) =1.
ELSEWHERE(PRCT(:)> (ZRCRAUTC(:)-PSIGMA_RC(:)) .AND. &
& PRCT(:)<=(ZRCRAUTC(:)+PSIGMA_RC(:)) )
PHLC_HCF(:)=(PRCT(:)+PSIGMA_RC(:)-ZRCRAUTC(:))/ &
&(2.*PSIGMA_RC(:))
PHLC_LCF(:)=MAX(0., PCF(:)-PHLC_HCF(:))
PHLC_HRC(:)=(PRCT(:)+PSIGMA_RC(:)-ZRCRAUTC(:))* &
&(PRCT(:)+PSIGMA_RC(:)+ZRCRAUTC(:))/ &
&(4.*PSIGMA_RC(:))
PHLC_LRC(:)=MAX(0., PRCT(:)-PHLC_HRC(:))
PRF(:) =PHLC_HCF(:)
ELSEWHERE(PRCT(:)>XRTMIN(2) .AND. PCF(:)>0.)
PHLC_HCF(:)=0.
PHLC_LCF(:)=PCF(:)
PHLC_HRC(:)=0.
PHLC_LRC(:)=PRCT(:)
PRF(:) =0.
ELSEWHERE
PHLC_HCF(:)=0.
PHLC_LCF(:)=0.
PHLC_HRC(:)=0.
PHLC_LRC(:)=0.
PRF(:) =0.
END WHERE
! Turner (2011, 2012)
ELSEIF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF' .OR. &
&HSUBG_PR_PDF=='HLCTRIANGPDF' .OR. HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
! Calculate maximum value r_cM from PDF forms
IF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF') THEN
ZCOEFFRCM=2.
ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN
ZCOEFFRCM=3.
ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
ZCOEFFRCM=4.
END IF
WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0.)
ZHLC_RCMAX(:)=ZCOEFFRCM*PRCT(:)/PCF(:)
END WHERE
! Split available water and cloud fraction in two parts
! Calculate local mean values int he low and high parts for the 3 PDF forms:
IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN
WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
ZHLC_LRCLOCAL(:)=0.5*ZRCRAUTC(:)
ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + ZRCRAUTC(:))/2.0
END WHERE
ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN
WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
ZHLC_LRCLOCAL(:)=( ZRCRAUTC(:) *(3.0 * ZHLC_RCMAX(:) - 2.0 * ZRCRAUTC(:) ) ) &
/ (3.0 * (2.0 * ZHLC_RCMAX(:) - ZRCRAUTC(:) ) )
ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 2.0*ZRCRAUTC(:)) / 3.0
END WHERE
ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
ZHLC_LRCLOCAL(:)=(3.0 *ZRCRAUTC(:)**3 - 8.0 *ZRCRAUTC(:)**2 * ZHLC_RCMAX(:) &
+ 6.0*ZRCRAUTC(:) *ZHLC_RCMAX(:)**2 ) &
/ &
(4.0* ZRCRAUTC(:)**2 -12.0*ZRCRAUTC(:) *ZHLC_RCMAX(:) &
+ 12.0 * ZHLC_RCMAX(:)**2 )
ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 3.0*ZRCRAUTC(:))/4.0
END WHERE
ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN
WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
WHERE((PRCT(:) / PCF(:)).LE.ZRCRAUTC(:))
ZHLC_LRCLOCAL(:)=( (ZHLC_RCMAX(:))**3 &
-(12.0 * (ZHLC_RCMAX(:))*(ZRCRAUTC(:))**2) &
+(8.0 * ZRCRAUTC(:)**3) ) &
/( (6.0 * (ZHLC_RCMAX(:))**2) &
-(24.0 * (ZHLC_RCMAX(:)) * ZRCRAUTC(:)) &
+(12.0 * ZRCRAUTC(:)**2) )
ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + 2.0 * ZRCRAUTC(:) )/3.0
ELSEWHERE
ZHLC_LRCLOCAL(:)=(2.0/3.0) * ZRCRAUTC(:)
ZHLC_HRCLOCAL(:)=(3.0*ZHLC_RCMAX(:)**3 - 8.0*ZRCRAUTC(:)**3) &
/ (6.0 * ZHLC_RCMAX(:)**2 - 12.0*ZRCRAUTC(:)**2)
END WHERE
END WHERE
END IF
! Compare r_cM to r_cR to know if cloud water content is high enough to split in two parts or not
WHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
! Calculate final values for LCF and HCF:
PHLC_LCF(:)=PCF(:) &
*(ZHLC_HRCLOCAL- &
(PRCT(:) / PCF(:))) &
/ (ZHLC_HRCLOCAL-ZHLC_LRCLOCAL)
PHLC_HCF(:)=MAX(0., PCF(:)-PHLC_LCF(:))
!
! Calculate final values for LRC and HRC:
PHLC_LRC(:)=ZHLC_LRCLOCAL*PHLC_LCF(:)
PHLC_HRC(:)=MAX(0., PRCT(:)-PHLC_LRC(:))
ELSEWHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).LE.ZRCRAUTC(:))
! Put all available cloud water and his fraction in the low part
PHLC_LCF(:)=PCF(:)
PHLC_HCF(:)=0.
PHLC_LRC(:)=PRCT(:)
PHLC_HRC(:)=0.
ELSEWHERE
PHLC_LCF(:)=0.
PHLC_HCF(:)=0.
PHLC_LRC(:)=0.
PHLC_HRC(:)=0.
END WHERE
PRF(:)=PHLC_HCF(:) !Precipitation fraction
ELSE
!wrong HSUBG_PR_PDF case
WRITE(ILUOUT,*) 'STOP : wrong HSUBG_PR_PDF case'
CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_COMPUTE_PDF','')
ENDIF
ELSE
!wrong HSUBG_AUCV case
WRITE(ILUOUT,*) 'STOP : wrong HSUBG_AUCV case'
CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_COMPUTE_PDF','')
ENDIF
!
END SUBROUTINE ICE4_COMPUTE_PDF
This diff is collapsed.
This diff is collapsed.
!MNH_LIC Copyright 1994-2014 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_ICE4_FAST_RI
INTERFACE
SUBROUTINE ICE4_FAST_RI(KSIZE, LDSOFT, LDCOMPUTE, &
&PRHODREF, PLVFACT, PLSFACT, &
&PAI, PCJ, PCIT, &
&PSSI, &
&PRCT, PRIT, &
&PRCBERI, PA_TH, PA_RC, PA_RI)
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR
USE MODI_BUDGET
USE MODD_BUDGET
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PAI ! Thermodynamical function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCIT ! Pristine ice conc. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PSSI ! Supersaturation over ice
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCBERI ! Bergeron-Findeisen effect
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI
END SUBROUTINE ICE4_FAST_RI
END INTERFACE
END MODULE MODI_ICE4_FAST_RI
SUBROUTINE ICE4_FAST_RI(KSIZE, LDSOFT, LDCOMPUTE, &
&PRHODREF, PLVFACT, PLSFACT, &
&PAI, PCJ, PCIT, &
&PSSI, &
&PRCT, PRIT, &
&PRCBERI, PA_TH, PA_RC, PA_RI)
!!
!!** PURPOSE
!! -------
!! Computes the fast ri process
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PAI ! Thermodynamical function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCIT ! Pristine ice conc. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PSSI ! Supersaturation over ice
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCBERI ! Bergeron-Findeisen effect
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI
!
!* 0.2 declaration of local variables
!
REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW
LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMASK
!
!-------------------------------------------------------------------------------
!
!-------------------------------------------------------------------------------
!
!* 7.2 Bergeron-Findeisen effect: RCBERI
!
GMASK(:)=PSSI(:)>0. .AND. PRCT(:)>XRTMIN(2) .AND. PRIT(:)>XRTMIN(4) .AND. &
&PCIT(:)>0. .AND. LDCOMPUTE(:)
IF(LDSOFT) THEN
WHERE(.NOT. GMASK(:))
PRCBERI(:) = 0.
END WHERE
ELSE
PRCBERI(:) = 0.
WHERE(GMASK(:))
PRCBERI(:) = MIN(1.E8, XLBI*(PRHODREF(:)*PRIT(:)/PCIT(:))**XLBEXI) ! Lbda_i
PRCBERI(:) = ( PSSI(:) / (PRHODREF(:)*PAI(:)) ) * PCIT(:) * &
( X0DEPI/PRCBERI(:) + X2DEPI*PCJ(:)*PCJ(:)/PRCBERI(:)**(XDI+2.0) )
END WHERE
ENDIF
PA_RC(:) = PA_RC(:) - PRCBERI(:)
PA_RI(:) = PA_RI(:) + PRCBERI(:)
PA_TH(:) = PA_TH(:) + PRCBERI(:)*(PLSFACT(:)-PLVFACT(:))
!
!
END SUBROUTINE ICE4_FAST_RI
This diff is collapsed.
!MNH_LIC Copyright 1994-2014 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_ICE4_NUCLEATION
INTERFACE
SUBROUTINE ICE4_NUCLEATION(KSIZE, LDSOFT, LDCOMPUTE, &
PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
PRVT, &
PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PPABST ! absolute pressure at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature at time t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RV
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI
END SUBROUTINE ICE4_NUCLEATION
END INTERFACE
END MODULE MODI_ICE4_NUCLEATION
SUBROUTINE ICE4_NUCLEATION(KSIZE, LDSOFT, LDCOMPUTE, &
PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
PRVT, &
PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI)
!!
!!** PURPOSE
!! -------
!! Computes the nucleation
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN
USE MODD_PARAM_ICE, ONLY : LFEEDBACKT
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PPABST ! absolute pressure at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature at time t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RV
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI
!
!* 0.2 declaration of local variables
!
REAL, DIMENSION(KSIZE) :: ZW ! work array
LOGICAL, DIMENSION(KSIZE) :: GNEGT ! Test where to compute the HEN process
REAL, DIMENSION(KSIZE) :: ZZW, & ! Work array
ZUSW, & ! Undersaturation over water
ZSSI ! Supersaturation over ice
!-------------------------------------------------------------------------------
!
!
PRVHENI_MR(:)=0.
IF(.NOT. LDSOFT) THEN
GNEGT(:)=PT(:)<XTT .AND. PRVT>XRTMIN(1) .AND. LDCOMPUTE(:)
PRVHENI_MR(:)=0.
ZSSI(:)=0.
ZUSW(:)=0.
ZZW(:)=0.
WHERE(GNEGT(:))
ZZW(:)=ALOG(PT(:))
ZUSW(:)=EXP(XALPW - XBETAW/PT(:) - XGAMW*ZZW(:)) ! es_w
ZZW(:)=EXP(XALPI - XBETAI/PT(:) - XGAMI*ZZW(:)) ! es_i
END WHERE
WHERE(GNEGT(:))
ZZW(:)=MIN(PPABST(:)/2., ZZW(:)) ! safety limitation
ZSSI(:)=PRVT(:)*(PPABST(:)-ZZW(:)) / ((XMV/XMD)*ZZW(:)) - 1.0
! Supersaturation over ice
ZUSW(:)=MIN(PPABST(:)/2., ZUSW(:)) ! safety limitation
ZUSW(:)=(ZUSW(:)/ZZW(:))*((PPABST(:)-ZZW(:))/(PPABST(:)-ZUSW(:))) - 1.0
! Supersaturation of saturated water vapor over ice
!
!* 3.1 compute the heterogeneous nucleation source RVHENI
!
!* 3.1.1 compute the cloud ice concentration
!
ZSSI(:)=MIN(ZSSI(:), ZUSW(:)) ! limitation of SSi according to SSw=0
END WHERE
ZZW(:)=0.
WHERE(GNEGT(:) .AND. PT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 )
ZZW(:)=XNU20*EXP(XALPHA2*ZSSI(:)-XBETA2)
ELSEWHERE(GNEGT(:) .AND. PT(:)<=XTT-2.0 .AND. PT(:)>=XTT-5.0 .AND. ZSSI(:)>0.0)
ZZW(:)=MAX(XNU20*EXP(-XBETA2 ), &
XNU10*EXP(-XBETA1*(PT(:)-XTT))*(ZSSI(:)/ZUSW(:))**XALPHA1)
END WHERE
WHERE(GNEGT(:))
ZZW(:)=ZZW(:)-PCIT(:)
ZZW(:)=MIN(ZZW(:), 50.E3) ! limitation provisoire a 50 l^-1
END WHERE
WHERE(GNEGT(:))
!
!* 3.1.2 update the r_i and r_v mixing ratios
!
PRVHENI_MR(:)=MAX(ZZW(:), 0.0)*XMNU0/PRHODREF(:)
PRVHENI_MR(:)=MIN(PRVT(:), PRVHENI_MR(:))
END WHERE
!Limitation due to 0 crossing of temperature
IF(LFEEDBACKT) THEN
ZW(:)=0.
WHERE(GNEGT(:))
ZW(:)=MIN(PRVHENI_MR(:), &
MAX(0., (XTT/PEXN(:)-PTHT(:))/PLSFACT(:))) / &
MAX(PRVHENI_MR(:), 1.E-20)
END WHERE
ELSE
ZW(:)=1.
ENDIF
PRVHENI_MR(:)=PRVHENI_MR(:)*ZW(:)
PCIT(:)=MAX(ZZW(:)*ZW(:)+PCIT(:), PCIT(:))
!
PB_RI(:)=PB_RI(:) + PRVHENI_MR(:)
PB_RV(:)=PB_RV(:) - PRVHENI_MR(:)
PB_TH(:)=PB_TH(:) + PRVHENI_MR(:)*PLSFACT(:)
ENDIF
!
END SUBROUTINE ICE4_NUCLEATION
!MNH_LIC Copyright 1994-2014 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_ICE4_NUCLEATION_WRAPPER
INTERFACE
SUBROUTINE ICE4_NUCLEATION_WRAPPER(KIT, KJT,KKT, LDMASK, &
PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
PRVT, &
PCIT, PRVHENI_MR)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KIT, KJT, KKT
LOGICAL, DIMENSION(KIT,KJT,KKT),INTENT(IN) :: LDMASK
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference density
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PT ! Temperature at time t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRVT ! Water vapor m.r. at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
END SUBROUTINE ICE4_NUCLEATION_WRAPPER
END INTERFACE
END MODULE MODI_ICE4_NUCLEATION_WRAPPER
SUBROUTINE ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, LDMASK, &
PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
PRVT, &
PCIT, PRVHENI_MR)
!!
!!** PURPOSE
!! -------
!! Computes the nucleation
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST, ONLY : XTT
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KIT, KJT, KKT
LOGICAL, DIMENSION(KIT,KJT,KKT),INTENT(IN) :: LDMASK
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference density
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PT ! Temperature at time t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRVT ! Water vapor m.r. at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t
REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
!
!* 0.2 declaration of local variables
!
INTEGER :: JL ! and PACK intrinsics
LOGICAL, DIMENSION(SIZE(PRVT,1),SIZE(PRVT,2),SIZE(PRVT,3)) :: GNEGT ! Test where to compute the HEN process
INTEGER :: INEGT
INTEGER, DIMENSION(COUNT(PT<XTT .AND. LDMASK)) :: I1,I2,I3 ! Used to replace the COUNT
REAL, DIMENSION(COUNT(PT<XTT .AND. LDMASK)) :: ZZT, & ! Temperature
ZPRES, & ! Pressure
ZRVT, & ! Water vapor m.r. at t
ZCIT, & ! Pristine ice conc. at t
ZTHT, & ! Theta at t
ZRHODREF, &
ZEXN, &
ZLSFACT, &
ZRVHENI_MR, &
ZB_TH, ZB_RV, ZB_RI
!-------------------------------------------------------------------------------
!
!
!
! optimization by looking for locations where
! the temperature is negative only !!!
!
GNEGT(:,:,:)=PT(:,:,:)<XTT .AND. LDMASK
INEGT=0
IF(COUNT(GNEGT)/=0) INEGT=ICE4_NUCLEATION_COUNTJV(GNEGT(:,:,:), KIT, KJT, KKT, SIZE(I1), I1(:), I2(:), I3(:))
PRVHENI_MR(:,:,:)=0.
IF(INEGT>=1) THEN
DO JL=1, INEGT
ZRVT(JL)=PRVT(I1(JL), I2(JL), I3(JL))
ZCIT(JL)=PCIT(I1(JL), I2(JL), I3(JL))
ZZT(JL)=PT(I1(JL), I2(JL), I3(JL))
ZPRES(JL)=PPABST(I1(JL), I2(JL), I3(JL))
ZTHT(JL)=PTHT(I1(JL), I2(JL), I3(JL))
ZRHODREF(JL)=PRHODREF(I1(JL), I2(JL), I3(JL))
ZEXN(JL)=PEXN(I1(JL), I2(JL), I3(JL))
ZLSFACT(JL)=PLSFACT(I1(JL), I2(JL), I3(JL))
ENDDO
CALL ICE4_NUCLEATION(INEGT, .FALSE., ZZT(:)<XTT, &
ZTHT, ZPRES, ZRHODREF, ZEXN, ZLSFACT, ZZT, &
ZRVT, &
ZCIT, ZRVHENI_MR, ZB_TH, ZB_RV, ZB_RI)
PRVHENI_MR(:,:,:)=UNPACK(ZRVHENI_MR(:), MASK=GNEGT(:,:,:), FIELD=0.0)
PCIT(:,:,:)=UNPACK(ZCIT(:), MASK=GNEGT(:,:,:), FIELD=PCIT(:,:,:))
END IF
!
CONTAINS
FUNCTION ICE4_NUCLEATION_COUNTJV(LTAB,KIT,KJT,KKT,KSIZE,I1,I2,I3) RESULT(IC)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KIT, KJT, KKT, KSIZE
LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LTAB ! Mask
INTEGER, DIMENSION(KSIZE), INTENT(OUT) :: I1, I2, I3 ! Used to replace the COUNT and PACK
INTEGER :: IC
INTEGER :: JI, JJ, JK
IC=0
DO JK=1, SIZE(LTAB,3)
DO JJ=1, SIZE(LTAB,2)
DO JI=1, SIZE(LTAB,1)
IF(LTAB(JI,JJ,JK)) THEN
IC=IC+1
I1(IC)=JI
I2(IC)=JJ
I3(IC)=JK
END IF
END DO
END DO
END DO
END FUNCTION ICE4_NUCLEATION_COUNTJV
!
END SUBROUTINE ICE4_NUCLEATION_WRAPPER
!MNH_LIC Copyright 1994-2014 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_ICE4_RAINFR_VERT
INTERFACE
SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PPRFR, PRR)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL
REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PPRFR !Precipitation fraction
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRR !Rain field
END SUBROUTINE ICE4_RAINFR_VERT
END INTERFACE
END MODULE MODI_ICE4_RAINFR_VERT
SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PPRFR, PRR)
!!
!!** PURPOSE
!! -------
!! Computes the rain fraction
!!
!! AUTHOR
!! ------
!! S. Riette from the plitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL
REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PPRFR !Precipitation fraction
REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRR !Rain field
!
!* 0.2 declaration of local variables
!
INTEGER :: JI, JJ, JK
!
!-------------------------------------------------------------------------------
!
!-------------------------------------------------------------------------------
DO JI = KIB,KIE
DO JJ = KJB, KJE
PPRFR(JI,JJ,KKE)=0.
DO JK=KKE-KKL, KKB, -KKL
IF (PRR(JI,JJ,JK) .GT. XRTMIN(3)) THEN
PPRFR(JI,JJ,JK)=MAX(PPRFR(JI,JJ,JK),PPRFR(JI,JJ,JK+KKL))
IF (PPRFR(JI,JJ,JK)==0) THEN
PPRFR(JI,JJ,JK)=1.
END IF
ELSE
PPRFR(JI,JJ,JK)=0.
END IF
END DO
END DO
END DO
!
!
END SUBROUTINE ICE4_RAINFR_VERT
!MNH_LIC Copyright 1994-2014 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_ICE4_RIMLTC
INTERFACE
SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, LDCOMPUTE, &
&PEXN, PLVFACT, PLSFACT, &
&PT, &
&PTHT, PRIT, &
&PRIMLTC_MR, PB_TH, PB_RC, PB_RI)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Cloud ice at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIMLTC_MR ! Mixing ratio change due to cloud ice melting
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RC
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI
END SUBROUTINE ICE4_RIMLTC
END INTERFACE
END MODULE MODI_ICE4_RIMLTC
SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, LDCOMPUTE, &
&PEXN, PLVFACT, PLSFACT, &
&PT, &
&PTHT, PRIT, &
&PRIMLTC_MR, PB_TH, PB_RC, PB_RI)
!!
!!** PURPOSE
!! -------
!! Computes the RIMLTC process
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR
USE MODD_PARAM_ICE, ONLY : LFEEDBACKT
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Cloud ice at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIMLTC_MR ! Mixing ratio change due to cloud ice melting
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RC
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI
!
!* 0.2 declaration of local variables
!
LOGICAL, DIMENSION(KSIZE) :: GMASK
!
!-------------------------------------------------------------------------------
!
!* 7.1 cloud ice melting
!
PRIMLTC_MR(:)=0.
IF(.NOT. LDSOFT) THEN
GMASK(:)=PRIT(:)>0. .AND. PT(:)>XTT .AND. LDCOMPUTE(:)
WHERE(GMASK(:))
PRIMLTC_MR(:)=PRIT(:)
END WHERE
IF(LFEEDBACKT) THEN
!Limitation due to 0 crossing of temperature
WHERE(GMASK(:))
PRIMLTC_MR(:)=MIN(PRIMLTC_MR(:), MAX(0., (PTHT(:)-XTT/PEXN(:)) / (PLSFACT(:)-PLVFACT(:))))
END WHERE
ENDIF
ENDIF
PB_RC(:) = PB_RC(:) + PRIMLTC_MR(:)
PB_RI(:) = PB_RI(:) - PRIMLTC_MR(:)
PB_TH(:) = PB_TH(:) - PRIMLTC_MR(:)*(PLSFACT(:)-PLVFACT(:))
!
!
END SUBROUTINE ICE4_RIMLTC
!MNH_LIC Copyright 1994-2014 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_ICE4_RRHONG
INTERFACE
SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, LDCOMPUTE, &
&PEXN, PLVFACT, PLSFACT, &
&PT, PRRT, &
&PTHT, &
&PRRHONG_MR, PB_TH, PB_RR, PB_RG)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRHONG_MR ! Mixing ratio change due to spontaneous freezing
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RR
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG
END SUBROUTINE ICE4_RRHONG
END INTERFACE
END MODULE MODI_ICE4_RRHONG
SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, LDCOMPUTE, &
&PEXN, PLVFACT, PLSFACT, &
&PT, PRRT, &
&PTHT, &
&PRRHONG_MR, PB_TH, PB_RR, PB_RG)
!!
!!** PURPOSE
!! -------
!! Computes the RRHONG process
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR
USE MODD_PARAM_ICE, ONLY : LFEEDBACKT
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE),INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph)
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRHONG_MR ! Mixing ratio change due to spontaneous freezing
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RR
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG
!
!* 0.2 declaration of local variables
!
LOGICAL, DIMENSION(SIZE(PRRT)) :: GMASK
!
!-------------------------------------------------------------------------------
!
!* 3.3 compute the spontaneous freezing source: RRHONG
!
PRRHONG_MR(:) = 0.
IF(.NOT. LDSOFT) THEN
GMASK(:)=PT(:)<XTT-35.0 .AND. PRRT(:)>XRTMIN(3) .AND. LDCOMPUTE(:)
WHERE(GMASK(:))
PRRHONG_MR(:) = PRRT(:)
ENDWHERE
IF(LFEEDBACKT) THEN
!Limitation due to -35 crossing of temperature
WHERE(GMASK(:))
PRRHONG_MR(:)=MIN(PRRHONG_MR(:), MAX(0., ((XTT-35.)/PEXN(:)-PTHT)/(PLSFACT(:)-PLVFACT(:))))
ENDWHERE
ENDIF
ENDIF
PB_RG(:) = PB_RG(:) + PRRHONG_MR(:)
PB_RR(:) = PB_RR(:) - PRRHONG_MR(:)
PB_TH(:) = PB_TH(:) + PRRHONG_MR(:)*(PLSFACT(:)-PLVFACT(:))
!
!
END SUBROUTINE ICE4_RRHONG
!MNH_LIC Copyright 1994-2014 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_ICE4_RSRIMCG_OLD
INTERFACE
SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, &
&PRHODREF, &
&PLBDAS, &
&PT, PRCT, PRST, &
&PRSRIMCG_MR, PB_RS, PB_RG)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG_MR ! Mr change due to cloud droplet riming of the aggregates
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RS
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG
END SUBROUTINE ICE4_RSRIMCG_OLD
END INTERFACE
END MODULE MODI_ICE4_RSRIMCG_OLD
SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, &
&PRHODREF, &
&PLBDAS, &
&PT, PRCT, PRST, &
&PRSRIMCG_MR, PB_RS, PB_RG)
!!
!!** PURPOSE
!! -------
!! Computes the riming-conversion of the large sized aggregates into graupel
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR
USE MODD_PARAM_ICE, ONLY : CSNOWRIMING
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG_MR ! Mr change due to cloud droplet riming of the aggregates
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RS
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG
!
!* 0.2 declaration of local variables
!
LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GRIM, GACC, GMASK
INTEGER :: IGRIM, IGACC
REAL, DIMENSION(SIZE(PRHODREF)) :: ZVEC1, ZVEC2, ZVEC3
INTEGER, DIMENSION(SIZE(PRHODREF)) :: IVEC1, IVEC2
REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZW6
INTEGER :: JJ
!-------------------------------------------------------------------------------
!
!
!-------------------------------------------------------------------------------
!
!* 5.1 cloud droplet riming of the aggregates
!
PRSRIMCG_MR(:)=0.
!
IF(.NOT. LDSOFT) THEN
GRIM(:) = PRCT(:)>XRTMIN(2) .AND. PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) .AND. PT(:)<XTT
IGRIM = COUNT(GRIM(:))
!
IF(IGRIM>0 .AND. CSNOWRIMING=='OLD ') THEN
!
! 5.1.1 select the PLBDAS
!
ZVEC1(1:IGRIM) = PACK( PLBDAS(:),MASK=GRIM(:) )
!
! 5.1.2 find the next lower indice for the PLBDAS in the geometrical
! set of Lbda_s used to tabulate some moments of the incomplete
! gamma function
!
ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001, &
XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) )
!
! 5.1.5 perform the linear interpolation of the normalized
! "XBS"-moment of the incomplete gamma function (XGAMINC_RIM2)
!
ZVEC1(1:IGRIM) = XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) &
- XGAMINC_RIM2( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0)
ZZW(:) = UNPACK( VECTOR=ZVEC1(1:IGRIM),MASK=GRIM,FIELD=0.0 )
!
! 5.1.6 riming-conversion of the large sized aggregates into graupeln
!
!
WHERE(GRIM(:))
PRSRIMCG_MR(:) = XSRIMCG * PLBDAS(:)**XEXSRIMCG & ! RSRIMCG
* (1.0 - ZZW(:) )/PRHODREF(:)
END WHERE
PRSRIMCG_MR(:)=MIN(PRST(:), PRSRIMCG_MR(:))
END IF
ENDIF
PB_RS(:) = PB_RS(:) - PRSRIMCG_MR(:)
PB_RG(:) = PB_RG(:) + PRSRIMCG_MR(:)
!
!
END SUBROUTINE ICE4_RSRIMCG_OLD
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
!MNH_LIC Copyright 1994-2014 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_ICE4_SLOW
INTERFACE
SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, LDCOMPUTE, PRHODREF, PT,&
&PSSI, PLVFACT, PLSFACT, &
&PRVT, PRCT, PRIT, PRST, PRGT,&
&PLBDAS, PLBDAG,&
&PAI, PCJ,&
&PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, &
&PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG)
IMPLICIT NONE
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PSSI ! Supersaturation over ice
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution
REAL, DIMENSION(KSIZE), INTENT(IN) :: PAI ! Thermodynamical function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI ! Homogeneous nucleation
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS ! Deposition on r_s
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS ! Aggregation on r_s
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS ! Autoconversion of r_i for r_s production
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG ! Deposition on r_g
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG
END SUBROUTINE ICE4_SLOW
END INTERFACE
END MODULE MODI_ICE4_SLOW
SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, LDCOMPUTE, PRHODREF, PT, &
&PSSI, PLVFACT, PLSFACT, &
&PRVT, PRCT, PRIT, PRST, PRGT, &
&PLBDAS, PLBDAG, &
&PAI, PCJ, &
&PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, &
&PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG)
!!
!!** PURPOSE
!! -------
!! Computes the slow process
!!
!! AUTHOR
!! ------
!! S. Riette from the splitting of rain_ice source code (nov. 2014)
!!
!! MODIFICATIONS
!! -------------
!!
!
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODD_RAIN_ICE_PARAM
USE MODD_RAIN_ICE_DESCR
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
INTEGER, INTENT(IN) :: KSIZE
LOGICAL, INTENT(IN) :: LDSOFT
LOGICAL, DIMENSION(KSIZE), INTENT(IN) :: LDCOMPUTE
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature
REAL, DIMENSION(KSIZE), INTENT(IN) :: PSSI ! Supersaturation over ice
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution
REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution
REAL, DIMENSION(KSIZE), INTENT(IN) :: PAI ! Thermodynamical function
REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI ! Homogeneous nucleation
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS ! Deposition on r_s
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS ! Aggregation on r_s
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS ! Autoconversion of r_i for r_s production
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG ! Deposition on r_g
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS
REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG
!
!* 0.2 declaration of local variables
!
REAL, DIMENSION(SIZE(PRHODREF)) :: ZCRIAUTI
REAL :: ZTIMAUTIC
LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMASK
!-------------------------------------------------------------------------------
!
!
!-------------------------------------------------------------------------------
!
!
!* 3.2 compute the homogeneous nucleation source: RCHONI
!
GMASK(:)=PT(:)<XTT-35.0 .AND. PRCT(:)>XRTMIN(2) .AND. LDCOMPUTE(:)
IF(LDSOFT) THEN
WHERE(.NOT. GMASK(:))
PRCHONI(:) = 0.
END WHERE
ELSE
PRCHONI(:) = 0.
WHERE(GMASK(:))
PRCHONI(:) = XHON*PRHODREF(:)*PRCT(:) &
*EXP( XALPHA3*(PT(:)-XTT)-XBETA3 )
ENDWHERE
ENDIF
PA_RI(:) = PA_RI(:) + PRCHONI(:)
PA_RC(:) = PA_RC(:) - PRCHONI(:)
PA_TH(:) = PA_TH(:) + PRCHONI(:)*(PLSFACT(:)-PLVFACT(:))
!
!* 3.4 compute the deposition, aggregation and autoconversion sources
!
!
!* 3.4.2 compute the riming-conversion of r_c for r_i production: RCAUTI
!
! ZZW(:) = 0.0
! ZTIMAUTIC = SQRT( XTIMAUTI*XTIMAUTC )
! WHERE ( (PRCT(:)>0.0) .AND. (PRIT(:)>0.0) .AND. (PRCS(:)>0.0) )
! ZZW(:) = MIN( PRCS(:),ZTIMAUTIC * MAX( SQRT( PRIT(:)*PRCT(:) ),0.0 ) )
! PRIS(:) = PRIS(:) + ZZW(:)
! PRCS(:) = PRCS(:) - ZZW(:)
! PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCAUTI))
! END WHERE
!
!* 3.4.3 compute the deposition on r_s: RVDEPS
!
GMASK(:)=PRVT(:)>XRTMIN(1) .AND. PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:)
IF(LDSOFT) THEN
WHERE(.NOT. GMASK(:))
PRVDEPS(:) = 0.
END WHERE
ELSE
PRVDEPS(:) = 0.
WHERE(GMASK(:))
PRVDEPS(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) * &
( X0DEPS*PLBDAS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS )
END WHERE
ENDIF
PA_RS(:) = PA_RS(:) + PRVDEPS(:)
PA_RV(:) = PA_RV(:) - PRVDEPS(:)
PA_TH(:) = PA_TH(:) + PRVDEPS(:)*PLSFACT(:)
!
!* 3.4.4 compute the aggregation on r_s: RIAGGS
!
GMASK(:)=PRIT(:)>XRTMIN(4) .AND. PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:)
IF(LDSOFT) THEN
WHERE(.NOT. GMASK(:))
PRIAGGS(:) = 0.
END WHERE
ELSE
PRIAGGS(:) = 0.
WHERE(GMASK(:))
PRIAGGS(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) &
* PRIT(:) &
* PLBDAS(:)**XEXIAGGS &
* PRHODREF(:)**(-XCEXVT)
END WHERE
ENDIF
PA_RS(:) = PA_RS(:) + PRIAGGS(:)
PA_RI(:) = PA_RI(:) - PRIAGGS(:)
!
!* 3.4.5 compute the autoconversion of r_i for r_s production: RIAUTS
!
GMASK(:)=PRIT(:)>XRTMIN(4) .AND. LDCOMPUTE(:)
IF(LDSOFT) THEN
WHERE(.NOT. GMASK(:))
PRIAUTS(:) = 0.
END WHERE
ELSE
PRIAUTS(:) = 0.
!ZCRIAUTI(:)=MIN(XCRIAUTI,10**(0.06*(PT(:)-XTT)-3.5))
ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI))
WHERE(GMASK(:))
PRIAUTS(:) = XTIMAUTI * EXP( XTEXAUTI*(PT(:)-XTT) ) &
* MAX( PRIT(:)-ZCRIAUTI(:),0.0 )
END WHERE
ENDIF
PA_RS(:) = PA_RS(:) + PRIAUTS(:)
PA_RI(:) = PA_RI(:) - PRIAUTS(:)
!
!* 3.4.6 compute the deposition on r_g: RVDEPG
!
!
GMASK(:)=PRVT(:)>XRTMIN(1) .AND. PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:)
IF(LDSOFT) THEN
WHERE(.NOT. GMASK(:))
PRVDEPG(:) = 0.
END WHERE
ELSE
PRVDEPG(:) = 0.
WHERE(GMASK(:))
PRVDEPG(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) * &
( X0DEPG*PLBDAG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG )
END WHERE
ENDIF
PA_RG(:) = PA_RG(:) + PRVDEPG(:)
PA_RV(:) = PA_RV(:) - PRVDEPG(:)
PA_TH(:) = PA_TH(:) + PRVDEPG(:)*PLSFACT(:)
!
!
END SUBROUTINE ICE4_SLOW
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment