diff --git a/src/MNH/ch_aqueous_sedimc2r2.f90 b/src/MNH/ch_aqueous_sedimc2r2.f90 deleted file mode 100644 index d09c51995884623486d71bd1baf240886d7464a7..0000000000000000000000000000000000000000 --- a/src/MNH/ch_aqueous_sedimc2r2.f90 +++ /dev/null @@ -1,348 +0,0 @@ -!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_CH_AQUEOUS_SEDIMC2R2 -! ################################ -! -INTERFACE - SUBROUTINE CH_AQUEOUS_SEDIMC2R2 (PTIME, PTSTEP, PRTMIN_AQ, PZZ, PRHODREF, & - PRHODJ, PRRM, PRRS, PCRM, PCRS, PSVT, PRSVS ) -! -REAL, INTENT(IN) :: PTIME ! Current time -REAL, INTENT(IN) :: PTSTEP ! Time step -REAL, INTENT(IN) :: PRTMIN_AQ ! LWC threshold liq. chem. -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRM ! Rain water m.r. at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRS ! Rain water m.r. source -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRM ! Rain water C at t-dt -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCRS ! Rain water C. source -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Precip. aq. species at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Precip. aq. species source -! -END SUBROUTINE CH_AQUEOUS_SEDIMC2R2 -END INTERFACE -END MODULE MODI_CH_AQUEOUS_SEDIMC2R2 -! -! ############################################################################## - SUBROUTINE CH_AQUEOUS_SEDIMC2R2 (PTIME, PTSTEP, PRTMIN_AQ, PZZ, PRHODREF, & - PRHODJ, PRRM, PRRS, PCRM, PCRS, PSVT, PRSVS ) -! ############################################################################## -! -!!**** * - compute the explicit microphysical sources -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the sedimentation of chemical -!! species in the raindrops for the C2R2 and C3R5 cloud microphysical schemes. -!! 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). see rain_c2r2.f90 -!! -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! None -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAMETERS -!! JPHEXT : Horizontal external points number -!! JPVEXT : Vertical external points number -!! Module MODD_CONF : -!! CCONF configuration of the model for the first time step -!! -!! REFERENCE -!! --------- -!! Book1 of the documentation ( routine CH_AQUEOUS_SEDIMC2R2 ) -!! -!! AUTHOR -!! ------ -!! M. Leriche & J.P. Pinty * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 30/10/08 -!! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -USE MODD_CONF -USE MODD_RAIN_C2R2_DESCR, ONLY : XCEXVT, XRTMIN, XCTMIN, & - XLBR, XLBEXR, XDR -USE MODD_RAIN_C2R2_KHKO_PARAM, ONLY : XFSEDRR, XFSEDCR -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -REAL, INTENT(IN) :: PTIME ! Current time -REAL, INTENT(IN) :: PTSTEP ! Time step -REAL, INTENT(IN) :: PRTMIN_AQ ! LWC threshold liq. chem. -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRM ! Rain water m.r. at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRS ! Rain water m.r. source -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRM ! Rain water C at t-dt -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCRS ! Rain water C. source -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Precip. aq. species at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Precip. aq. species source -! -!* 0.2 Declarations of local variables : -! -INTEGER :: JK,JI,JJ ! Vertical loop index for the rain sedimentation -INTEGER :: JN ! Temporal loop index for the rain sedimentation -INTEGER :: IIB ! Define the domain where is -INTEGER :: IIE ! the microphysical sources have to be computed -INTEGER :: IJB ! -INTEGER :: IJE ! -INTEGER :: IKB ! -INTEGER :: IKE ! -! -REAL :: ZTSPLITR ! Small time step for rain sedimentation -! -INTEGER :: ISEDIM ! Case number of sedimentation -LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: GSEDIM ! where to compute the SED processes -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZZRRS ! rain water m.r.source for sedim -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZZCRS ! rain water C source for sedim -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZRRS ! Rain water m.r. source phys.tendency (*dt) -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZCRS ! Rain water C source phys.tendency -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZWLBDR3, ZWLBDR ! Slope parameter of the raindrops distribution -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZW ! work array -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZWSEDR, ZWSEDC ! sedimentation fluxes -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZRR_SEDIM ! Drain/Dt sur ZTSPLIT -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZCR_SEDIM ! Drain/Dt sur ZTSPLIT -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZSV_SEDIM_FACT ! Cumul des Dsv/DT -REAL, DIMENSION(:), ALLOCATABLE :: ZZZRRS ! Rain water m.r. source -REAL, DIMENSION(:), ALLOCATABLE :: ZZZCRS ! Rain water C source -REAL, DIMENSION(:), ALLOCATABLE :: ZLBDR ! slope parameter -! -REAL, DIMENSION(:), ALLOCATABLE :: ZRHODREF, & ! RHO Dry REFerence - ZZW1, ZZW2, ZZW3 ! Work array -REAL, SAVE :: ZRTMIN, ZCTMIN -! -REAL :: ZVTRMAX, ZDZMIN, ZT -LOGICAL, SAVE :: GSFIRSTCALL = .TRUE. -INTEGER, SAVE :: ISPLITR -! -INTEGER , DIMENSION(SIZE(GSEDIM)) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics -! -!------------------------------------------------------------------------------- -! -!* 1. COMPUTE THE LOOP BOUNDS -! ----------------------- -! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IKB=1+JPVEXT -IKE=SIZE(PZZ,3) - JPVEXT -! -!------------------------------------------------------------------------------- -! -!!* 2. TRANSFORMATION INTO PHYSICAL TENDENCIES -! --------------------------------------- -! -ZRRS(:,:,:) = PRRS(:,:,:) / PRHODJ(:,:,:) -ZCRS(:,:,:) = PCRS(:,:,:) / PRHODJ(:,:,:) -! -!------------------------------------------------------------------------------- -! -!* 3. COMPUTE THE SEDIMENTATION (RS) SOURCE -! ------------------------------------- -! -!* 3.1 splitting factor for high Courant number C=v_fall*(del_Z/del_T) -! -firstcall : IF (GSFIRSTCALL) THEN - GSFIRSTCALL = .FALSE. - ZVTRMAX = 30. !cf. ini_rain_c2r2.f90 - ZDZMIN = MINVAL(PZZ(IIB:IIE,IJB:IJE,IKB+1:IKE+1)-PZZ(IIB:IIE,IJB:IJE,IKB:IKE)) - ISPLITR = 1 - SPLIT : DO - ZT = PTSTEP / FLOAT(ISPLITR) - IF ( ZT * ZVTRMAX / ZDZMIN .LT. 1.) EXIT SPLIT - ISPLITR = ISPLITR + 1 - END DO SPLIT - ZRTMIN = XRTMIN(3) / PTSTEP - ZCTMIN = XCTMIN(3) / PTSTEP -END IF firstcall -! -!* 3.2 Compute the slope parameter -! - ZWLBDR3(:,:,:) = 1.E30 - ZWLBDR(:,:,:) = 1.E10 -! WHERE (ZRRS(:,:,:)>0.0.AND.ZCRS(:,:,:)>0.0 ) - WHERE ( ZRRS(:,:,:)>ZRTMIN .AND. ZCRS(:,:,:)>ZCTMIN ) - ZWLBDR3(:,:,:) = XLBR * ZCRS(:,:,:) / (PRHODREF(:,:,:) * ZRRS(:,:,:)) - ZWLBDR(:,:,:) = ZWLBDR3(:,:,:)**XLBEXR - END WHERE -! -!* 3.3 time splitting loop initialization -! -ZTSPLITR = PTSTEP / FLOAT(ISPLITR) ! Small time step -! -!* 3.4 compute the fluxes -! -! optimization by looking for locations where -! the precipitating fields are larger than a minimal value only !!! -! -ZZRRS(:,:,:) = 0.0 -ZZRRS(:,:,:) = ZRRS(:,:,:) - PRRM(:,:,:) / PTSTEP -ZRRS(:,:,:) = PRRM(:,:,:) / PTSTEP -ZZCRS(:,:,:) = 0.0 -ZZCRS(:,:,:) = ZCRS(:,:,:) - PCRM(:,:,:) / PTSTEP -ZCRS(:,:,:) = PCRM(:,:,:) / PTSTEP -ZSV_SEDIM_FACT(:,:,:) = 1.0 -DO JN = 1 , ISPLITR -! - GSEDIM(:,:,:) = .FALSE. - GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZRRS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN - ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:)) - IF( ISEDIM >= 1 ) THEN - IF( JN==1 ) THEN - ZRRS(:,:,:) = ZRRS(:,:,:) + ZZRRS(:,:,:) / ISPLITR - ZRRS(:,:,:) = ZRRS(:,:,:) * PTSTEP - ZCRS(:,:,:) = ZCRS(:,:,:) + ZZCRS(:,:,:) / ISPLITR - ZCRS(:,:,:) = ZCRS(:,:,:) * PTSTEP - ZW(:,:,:) = 0.0 - DO JK = IKB , IKE - ZW(:,:,JK) =ZTSPLITR/(PZZ(:,:,JK+1)-PZZ(:,:,JK)) - END DO - ELSE - ZRRS(:,:,:) = ZRRS(:,:,:) + ZZRRS(:,:,:) * ZTSPLITR - ZCRS(:,:,:) = ZCRS(:,:,:) + ZZCRS(:,:,:) * ZTSPLITR - END IF - ALLOCATE(ZRHODREF(ISEDIM)) - ALLOCATE(ZZZRRS(ISEDIM)) - ALLOCATE(ZZZCRS(ISEDIM)) - ALLOCATE(ZLBDR(ISEDIM)) - DO JL=1,ISEDIM - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZZZRRS(JL) = ZRRS(I1(JL),I2(JL),I3(JL)) - ZZZCRS(JL) = ZCRS(I1(JL),I2(JL),I3(JL)) - ZLBDR(JL) = ZWLBDR(I1(JL),I2(JL),I3(JL)) - ENDDO - ALLOCATE(ZZW1(ISEDIM)) ; ZZW1(:) = 0.0 - ALLOCATE(ZZW2(ISEDIM)) ; ZZW2(:) = 0.0 - ALLOCATE(ZZW3(ISEDIM)) ; ZZW3(:) = 0.0 -! -!* for rain -! -!microphysical tendency - WHERE( ZZZRRS(:)>XRTMIN(3) ) - ZZW3(:) = ZRHODREF(:)**(-XCEXVT) * (ZLBDR(:)**(-XDR)) - ZZW1(:) = XFSEDRR * ZZZRRS(:)* ZZW3(:) * ZRHODREF(:) - ZZW2(:) = XFSEDCR * ZZZCRS(:)* ZZW3(:) - END WHERE - ZWSEDR(:,:,:) = UNPACK( ZZW1(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - ZWSEDC(:,:,:) = UNPACK( ZZW2(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - DO JK = IKB , IKE - ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK)) & - /PRHODREF(:,:,JK) - ZCR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSEDC(:,:,JK+1)-ZWSEDC(:,:,JK)) - END DO - ZRRS(:,:,:) = ZRRS(:,:,:) + ZRR_SEDIM(:,:,:) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZCR_SEDIM(:,:,:) -! WHERE (ZRRS(:,:,:)>0.0.AND.ZCRS(:,:,:)>0.0 ) - WHERE (ZRRS(:,:,:)>XRTMIN(3) .AND. ZCRS(:,:,:)>XCTMIN(3) ) - ZWLBDR3(:,:,:) = XLBR * ZCRS(:,:,:) / (PRHODREF(:,:,:) * ZRRS(:,:,:)) - ZWLBDR(:,:,:) = ZWLBDR3(:,:,:)**XLBEXR - END WHERE -! -!chemistry tendency - ZZW1(:) = 0. - ZZW3(:) = 0. - WHERE( (ZZZRRS(:)*ZRHODREF(:)/1.e3) > PRTMIN_AQ ) - ZZW3(:) = ZRHODREF(:)**(-XCEXVT) * (ZLBDR(:)**(-XDR)) - ZZW1(:) = XFSEDRR * ZZW3(:) * ZRHODREF(:) - END WHERE - ZWSEDR(:,:,:) = UNPACK( ZZW1(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - ZRR_SEDIM(:,:,:) = 0.0 - DO JK = IKB , IKE - ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK)) & - /PRHODREF(:,:,JK) - END DO - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZZRRS) - DEALLOCATE(ZZZCRS) - DEALLOCATE(ZLBDR) - DEALLOCATE(ZZW1) - DEALLOCATE(ZZW2) - DEALLOCATE(ZZW3) - ZSV_SEDIM_FACT(:,:,:) = ZSV_SEDIM_FACT(:,:,:) * (1.0 + ZRR_SEDIM(:,:,:)) -!! (1.0 + ZRR_SEDIM(:,:,:)/MAX(ZZRRS(:,:,:),PRTMIN_AQ)) - END IF -END DO -! -! Apply the rain sedimentation rate to the WR_xxx aqueous species -! -DO JL= 1, SIZE(PRSVS,4) - PRSVS(:,:,:,JL) = MAX( 0.0,ZSV_SEDIM_FACT(:,:,:)*PRSVS(:,:,:,JL) ) -END DO -! -CONTAINS -! -!------------------------------------------------------------------------------- -! - FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC) -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.2 declaration of local variables -! -! -LOGICAL, DIMENSION(:,:,:) :: LTAB ! Mask -INTEGER, DIMENSION(:) :: 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 COUNTJV -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE CH_AQUEOUS_SEDIMC2R2 diff --git a/src/MNH/ch_aqueous_sedimkhko.f90 b/src/MNH/ch_aqueous_sedimkhko.f90 deleted file mode 100644 index 63f5eacbf62cfa535bc04b1d08d32f1a7c33f7a4..0000000000000000000000000000000000000000 --- a/src/MNH/ch_aqueous_sedimkhko.f90 +++ /dev/null @@ -1,316 +0,0 @@ -!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_CH_AQUEOUS_SEDIMKHKO -! ################################ -! -INTERFACE - SUBROUTINE CH_AQUEOUS_SEDIMKHKO (PTSTEP, PZZ, PRHODREF, PRHODJ, & - PRRT, PRRS, PCRT, PCRS, PSVT, PRSVS ) -! -REAL, INTENT(IN) :: PTSTEP ! Time step -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRS ! Rain water m.r. source -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCRT ! Rain water C. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCRS ! Rain water C. source -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Precip. aq. species at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Precip. aq. species source -! -END SUBROUTINE CH_AQUEOUS_SEDIMKHKO -END INTERFACE -END MODULE MODI_CH_AQUEOUS_SEDIMKHKO -! -! ############################################################################# - SUBROUTINE CH_AQUEOUS_SEDIMKHKO (PTSTEP, PZZ, PRHODREF, PRHODJ, & - PRRT, PRRS, PCRT, PCRS, PSVT, PRSVS ) -! ############################################################################# -! -!!**** * - compute the explicit microphysical sources -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the sedimentation of chemical -!! species in the raindrops for the KHKO cloud microphysical schemes. -!! 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). see rain_khko.f90 -!! -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! None -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAMETERS -!! JPHEXT : Horizontal external points number -!! JPVEXT : Vertical external points number -!! Module MODD_CONF : -!! CCONF configuration of the model for the first time step -!! -!! REFERENCE -!! --------- -!! Book1 of the documentation ( routine CH_AQUEOUS_SEDIMC2R2 ) -!! -!! AUTHOR -!! ------ -!! M. Leriche & J.P. Pinty * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 03/11/08 -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST -USE MODD_PARAMETERS -USE MODD_CONF -USE MODD_RAIN_C2R2_DESCR, ONLY : XRTMIN, XCTMIN -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -REAL, INTENT(IN) :: PTSTEP ! Time step -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRS ! Rain water m.r. source -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCRT ! Rain water C. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCRS ! Rain water C. source -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Precip. aq. species at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Precip. aq. species source -! -!* 0.2 Declarations of local variables : -! -INTEGER :: JK ! Vertical loop index for the rain sedimentation -INTEGER :: JN ! Temporal loop index for the rain sedimentation -INTEGER :: IIB ! Define the domain where is -INTEGER :: IIE ! the microphysical sources have to be computed -INTEGER :: IJB ! -INTEGER :: IJE ! -INTEGER :: IKB ! -INTEGER :: IKE ! -! -REAL :: ZTSPLITR ! Small time step for rain sedimentation -! -INTEGER :: ISEDIM ! Case number of sedimentation -LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: GSEDIM ! where to compute the SED processes -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZZRRS ! rain water m.r.source for sedim -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZZCRS ! rain water C source for sedim -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZRRS ! Rain water m.r. source phys.tendency (*dt) -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZCRS ! Rain water C source phys.tendency -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZW ! work array -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZMVRR, ZVRR ! sedimentation velocity for rain -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZWSED ! sedimentation fluxes -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZRR_SEDIM ! Drain/Dt sur ZTSPLIT -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZSV_SEDIM_FACT ! Cumul des Dsv/DT -REAL, DIMENSION(:), ALLOCATABLE :: ZZZRRS ! Rain water m.r. source -! -REAL, DIMENSION(:), ALLOCATABLE :: ZRHODREF, & ! RHO Dry REFerence - ZZVRR, & ! sedimentation velocity for rain - ZZW1 ! Work array -REAL, SAVE :: ZRTMIN, ZCTMIN -! -REAL :: ZVTRMAX, ZDZMIN, ZT -LOGICAL, SAVE :: GSFIRSTCALL = .TRUE. -INTEGER, SAVE :: ISPLITR -! -INTEGER , DIMENSION(SIZE(GSEDIM)) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics -! -!------------------------------------------------------------------------------- -! -!* 1. COMPUTE THE LOOP BOUNDS -! ----------------------- -! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -IKB=1+JPVEXT -IKE=SIZE(PZZ,3) - JPVEXT -! -!------------------------------------------------------------------------------- -! -!!* 2. TRANSFORMATION INTO PHYSICAL TENDENCIES -! --------------------------------------- -! -ZRRS(:,:,:) = PRRS(:,:,:) / PRHODJ(:,:,:) -ZCRS(:,:,:) = PCRS(:,:,:) / PRHODJ(:,:,:) -! -!------------------------------------------------------------------------------- -! -!* 3. COMPUTE THE SEDIMENTATION (RS) SOURCE -! ------------------------------------- -! -!* 3.1 splitting factor for high Courant number C=v_fall*(del_Z/del_T) -! -firstcall : IF (GSFIRSTCALL) THEN - GSFIRSTCALL = .FALSE. - ZVTRMAX = 30. !cf. ini_rain_c2r2.f90 - ZDZMIN = MINVAL(PZZ(IIB:IIE,IJB:IJE,IKB+1:IKE+1)-PZZ(IIB:IIE,IJB:IJE,IKB:IKE)) - ISPLITR = 1 - SPLIT : DO - ZT = PTSTEP / FLOAT(ISPLITR) - IF ( ZT * ZVTRMAX / ZDZMIN .LT. 1.) EXIT SPLIT - ISPLITR = ISPLITR + 1 - END DO SPLIT - ZRTMIN = XRTMIN(3) / PTSTEP - ZCTMIN = XCTMIN(3) / PTSTEP -END IF firstcall -! -!* 3.2 compute the sedimentation velocities for rain -! -ZMVRR(:,:,:) = 0. -ZVRR(:,:,:) = 0. -WHERE (PCRT(:,:,:) > XCTMIN(3) .and. PRRT(:,:,:)>XRTMIN(3) ) - ZMVRR(:,:,:) = ((3. * PRHODREF(:,:,:)*PRRT(:,:,:))/ & - (4. * XPI *XRHOLW*PCRT(:,:,:)))**0.333 ! in m - ZVRR(:,:,:) = 0.012 * 1.0E6 * ZMVRR(:,:,:) - 0.2 ! velocity for mixing ratio -END WHERE -WHERE (ZVRR(:,:,:) .lt. 0.0) - ZVRR(:,:,:) = 0.0 -END WHERE -! -!* 3.3 time splitting loop initialization -! -ZTSPLITR = PTSTEP / FLOAT(ISPLITR) ! Small time step -! -!* 3.4 compute the fluxes -! -! optimization by looking for locations where -! the precipitating fields are larger than a minimal value only !!! -! -ZZRRS(:,:,:) = 0.0 -ZZRRS(:,:,:) = ZRRS(:,:,:) - PRRT(:,:,:) / PTSTEP -ZRRS(:,:,:) = PRRT(:,:,:) / PTSTEP -ZZCRS(:,:,:) = 0.0 -ZZCRS(:,:,:) = ZCRS(:,:,:) - PCRT(:,:,:) / PTSTEP -ZCRS(:,:,:) = PCRT(:,:,:) / PTSTEP -ZSV_SEDIM_FACT(:,:,:) = 1.0 -DO JN = 1 , ISPLITR -! - GSEDIM(:,:,:) = .FALSE. - GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZRRS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN .AND. & - ZCRS(IIB:IIE,IJB:IJE,IKB:IKE) > ZCTMIN - ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:)) - IF( ISEDIM >= 1 ) THEN - IF( JN==1 ) THEN - ZRRS(:,:,:) = ZRRS(:,:,:) + ZZRRS(:,:,:) / ISPLITR - ZRRS(:,:,:) = ZRRS(:,:,:) * PTSTEP - ZCRS(:,:,:) = ZCRS(:,:,:) + ZZCRS(:,:,:) / ISPLITR - ZCRS(:,:,:) = ZCRS(:,:,:) * PTSTEP - ZW(:,:,:) = 0.0 - DO JK = IKB , IKE-1 - ZW(:,:,JK) =ZTSPLITR*2./(PRHODREF(:,:,JK)*(PZZ(:,:,JK+2)-PZZ(:,:,JK))) - END DO - ZW(:,:,IKE) =ZTSPLITR/(PRHODREF(:,:,IKE)*(PZZ(:,:,IKE+1)-PZZ(:,:,IKE))) - ELSE - ZRRS(:,:,:) = ZRRS(:,:,:) + ZZRRS(:,:,:) * ZTSPLITR - ZCRS(:,:,:) = ZCRS(:,:,:) + ZZCRS(:,:,:) * ZTSPLITR - END IF - ALLOCATE(ZRHODREF(ISEDIM)) - ALLOCATE(ZZZRRS(ISEDIM)) - ALLOCATE(ZZVRR(ISEDIM)) - DO JL=1,ISEDIM - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZZZRRS(JL) = ZRRS(I1(JL),I2(JL),I3(JL)) - ZZVRR(JL) = ZVRR(I1(JL),I2(JL),I3(JL)) - ENDDO - ALLOCATE(ZZW1(ISEDIM)) ; ZZW1(:) = 0.0 -! -!* for drizzle -! - ZZW1(:) = ZZVRR(:) * ZZZRRS(:) * ZRHODREF(:) - ZWSED(:,:,:) = UNPACK( ZZW1(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - DO JK = IKB , IKE - ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK)) - END DO - ZRRS(:,:,:) = ZRRS(:,:,:) + ZRR_SEDIM(:,:,:) -! - ZZW1(:) = ZZVRR(:) * ZRHODREF(:) - ZWSED(:,:,:) = UNPACK( ZZW1(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - ZRR_SEDIM(:,:,:) = 0.0 - DO JK = IKB , IKE - ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK)) - END DO - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZZRRS) - DEALLOCATE(ZZVRR) - DEALLOCATE(ZZW1) - ZSV_SEDIM_FACT(:,:,:) = ZSV_SEDIM_FACT(:,:,:) * (1.0 + ZRR_SEDIM(:,:,:)) -!! (1.0 + ZRR_SEDIM(:,:,:)/MAX(ZZRRS(:,:,:),XRTMIN_AQ)) - END IF -END DO -! -! Apply the rain sedimentation rate to the WR_xxx aqueous species -! -DO JL= 1, SIZE(PRSVS,4) - PRSVS(:,:,:,JL) = MAX( 0.0,ZSV_SEDIM_FACT(:,:,:)*PRSVS(:,:,:,JL) ) -END DO -! -CONTAINS -! -!------------------------------------------------------------------------------- -! - FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC) -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.2 declaration of local variables -! -! -LOGICAL, DIMENSION(:,:,:) :: LTAB ! Mask -INTEGER, DIMENSION(:) :: 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 COUNTJV -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE CH_AQUEOUS_SEDIMKHKO diff --git a/src/MNH/modd_ch_const.f90 b/src/MNH/modd_ch_const.f90 deleted file mode 100644 index 6fdc9bb011b14481c0ed0c806fabc58f72014953..0000000000000000000000000000000000000000 --- a/src/MNH/modd_ch_const.f90 +++ /dev/null @@ -1,53 +0,0 @@ -!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. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 modd 2006/05/18 13:07:25 -!----------------------------------------------------------------- -! ##################### - MODULE MODD_CH_CONST -! ###################### -! -!! -!! PURPOSE -!! ------- -! -! -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -! -!! AUTHOR -!! ------ -!! P. Tulet (16/01/01) *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! - -REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XSREALMASSMOLVAL ! final molecular - ! diffusivity value -REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XSREALREACTVAL ! final chemical - ! reactivity factor - ! with biologie -REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XSREALHENRYVAL ! chemical Henry - ! constant value -REAL, SAVE :: XCONVERSION ! emission unit - ! conversion factor -! -END MODULE MODD_CH_CONST - - diff --git a/src/MNH/modd_ch_depn.f90 b/src/MNH/modd_ch_depn.f90 deleted file mode 100644 index c5bcab16e5087446fcddb11660213b9283dfaf1a..0000000000000000000000000000000000000000 --- a/src/MNH/modd_ch_depn.f90 +++ /dev/null @@ -1,100 +0,0 @@ -!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. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 modd 2006/06/27 14:05:40 -!----------------------------------------------------------------- -! ##################### - MODULE MODD_CH_DEP_n -! ###################### -! -!! -!! PURPOSE -!! ------- -! -! -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -! -!! AUTHOR -!! ------ -!! P. Tulet *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! 16/01/01 (P. Tulet) restructured -!------------------------------------------------------------------------------ -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY: JPMODELMAX -IMPLICIT NONE - -TYPE CH_DEP_t -! - REAL :: XRCSANDSO2 ! SO2 sand surface resistance - REAL :: XRCSANDO3 ! O3 sand surface resistance - REAL :: XRCCLAYSO2 ! SO2 clay surface resistance - REAL :: XRCCLAYO3 ! O3 clay surface resistance - REAL :: XRCSNOWSO2 ! SO2 snow surface resistance - REAL :: XRCSNOWO3 ! O3 snow surface resistance - REAL :: XLANDREXT ! land type for external leaf resistance - REAL, DIMENSION(:,:), POINTER :: XDIFFMOLH2O=>NULL() ! H2O molecular diffusivity - - REAL, DIMENSION(:,:,:), POINTER :: XHENRYVALCOR=>NULL() ! temperature correction for - ! chemical Henry constant value - REAL, DIMENSION(:,:,:), POINTER :: XVDEPT=>NULL() ! final dry deposition velocity at t -! -! -! - - -END TYPE CH_DEP_t - -TYPE(CH_DEP_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: CH_DEP_MODEL - -REAL, POINTER :: XRCSANDSO2=>NULL() -REAL, POINTER :: XRCSANDO3=>NULL() -REAL, POINTER :: XRCCLAYSO2=>NULL() -REAL, POINTER :: XRCCLAYO3=>NULL() -REAL, POINTER :: XRCSNOWSO2=>NULL() -REAL, POINTER :: XRCSNOWO3=>NULL() -REAL, POINTER :: XLANDREXT=>NULL() -REAL, DIMENSION(:,:), POINTER :: XDIFFMOLH2O=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XHENRYVALCOR=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XVDEPT=>NULL() - -CONTAINS - -SUBROUTINE CH_DEP_GOTO_MODEL(KFROM, KTO) -INTEGER, INTENT(IN) :: KFROM, KTO -! -! Save current state for allocated arrays -CH_DEP_MODEL(KFROM)%XDIFFMOLH2O=>XDIFFMOLH2O -CH_DEP_MODEL(KFROM)%XHENRYVALCOR=>XHENRYVALCOR -CH_DEP_MODEL(KFROM)%XVDEPT=>XVDEPT -! -! Current model is set to model KTO -XRCSANDSO2=>CH_DEP_MODEL(KTO)%XRCSANDSO2 -XRCSANDO3=>CH_DEP_MODEL(KTO)%XRCSANDO3 -XRCCLAYSO2=>CH_DEP_MODEL(KTO)%XRCCLAYSO2 -XRCCLAYO3=>CH_DEP_MODEL(KTO)%XRCCLAYO3 -XRCSNOWSO2=>CH_DEP_MODEL(KTO)%XRCSNOWSO2 -XRCSNOWO3=>CH_DEP_MODEL(KTO)%XRCSNOWO3 -XLANDREXT=>CH_DEP_MODEL(KTO)%XLANDREXT -XDIFFMOLH2O=>CH_DEP_MODEL(KTO)%XDIFFMOLH2O -XHENRYVALCOR=>CH_DEP_MODEL(KTO)%XHENRYVALCOR -XVDEPT=>CH_DEP_MODEL(KTO)%XVDEPT - -END SUBROUTINE CH_DEP_GOTO_MODEL - -END MODULE MODD_CH_DEP_n