diff --git a/gmkpack_ignored_files b/gmkpack_ignored_files new file mode 100644 index 0000000000000000000000000000000000000000..0ab93b55c13479ac3bf56b430354acc3586bf3b6 --- /dev/null +++ b/gmkpack_ignored_files @@ -0,0 +1,48 @@ +phyex/micro/lima_bergeron.F90 +phyex/micro/lima_ccn_activation.F90 +phyex/micro/lima_ccn_hom_freezing.F90 +phyex/micro/lima_collisional_ice_breakup.F90 +phyex/micro/lima_compute_cloud_fractions.F90 +phyex/micro/lima_conversion_melting_snow.F90 +phyex/micro/lima_droplets_accretion.F90 +phyex/micro/lima_droplets_autoconversion.F90 +phyex/micro/lima_droplets_hom_freezing.F90 +phyex/micro/lima_droplets_riming_snow.F90 +phyex/micro/lima_droplets_self_collection.F90 +phyex/micro/lima_drops_break_up.F90 +phyex/micro/lima_drops_hom_freezing.F90 +phyex/micro/lima_drops_self_collection.F90 +phyex/micro/lima_drops_to_droplets_conv.F90 +phyex/micro/lima_functions.F90 +phyex/micro/lima_graupel.F90 +phyex/micro/lima_graupel_deposition.F90 +phyex/micro/lima_hail.F90 +phyex/micro/lima_hail_deposition.F90 +phyex/micro/lima_ice4_nucleation.F90 +phyex/micro/lima_ice_aggregation_snow.F90 +phyex/micro/lima_ice_deposition.F90 +phyex/micro/lima_ice_melting.F90 +phyex/micro/lima_init_ccn_activation_spectrum.F90 +phyex/micro/lima_inst_procs.F90 +phyex/micro/lima_meyers_nucleation.F90 +phyex/micro/lima_nucleation_procs.F90 +phyex/micro/lima_phillips_ifn_nucleation.F90 +phyex/micro/lima_phillips_integ.F90 +phyex/micro/lima_phillips_ref_spectrum.F90 +phyex/micro/lima_rain_accr_snow.F90 +phyex/micro/lima_rain_evaporation.F90 +phyex/micro/lima_rain_freezing.F90 +phyex/micro/lima_raindrop_shattering_freezing.F90 +phyex/micro/lima_read_xker_gweth.F90 +phyex/micro/lima_read_xker_raccs.F90 +phyex/micro/lima_read_xker_rdryg.F90 +phyex/micro/lima_read_xker_sdryg.F90 +phyex/micro/lima_read_xker_sweth.F90 +phyex/micro/lima_sedimentation.F90 +phyex/micro/lima_snow_deposition.F90 +phyex/micro/lima_snow_self_collection.F90 +phyex/micro/lima_tendencies.F90 +phyex/micro/nrcolss.f90 +phyex/micro/nscolrg.f90 +phyex/micro/nzcolx.f90 +phyex/micro/set_conc_lima.f90 diff --git a/src/arome/micro/lima_functions.F90 b/src/arome/micro/lima_functions.F90 deleted file mode 100644 index 00bd01a6adb7f0ce8d097d200abd4af2a805a0c9..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_functions.F90 +++ /dev/null @@ -1,380 +0,0 @@ -!################################# - MODULE MODI_LIMA_FUNCTIONS -!################################# -! -INTERFACE -! -FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC) - LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: LTAB - INTEGER, DIMENSION(:), INTENT(INOUT) :: I1,I2,I3 - INTEGER :: IC -END FUNCTION COUNTJV -! -FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG) - REAL, INTENT(IN) :: PALPHA - REAL, INTENT(IN) :: PNU - REAL, INTENT(IN) :: PP - REAL :: PMOMG -END FUNCTION MOMG -! -FUNCTION RECT(PA,PB,PX,PX1,PX2) RESULT(PRECT) - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, INTENT(IN) :: PX1 - REAL, INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PRECT -END FUNCTION RECT -! -FUNCTION DELTA(PA,PB,PX,PX1,PX2) RESULT(PDELTA) - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, INTENT(IN) :: PX1 - REAL, INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PDELTA -END FUNCTION DELTA -! -FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2) RESULT(PDELTA_VEC) - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, DIMENSION(:), INTENT(IN) :: PX1 - REAL, DIMENSION(:), INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PDELTA_VEC -END FUNCTION DELTA_VEC -! -FUNCTION ARTH(FIRST,INCREMENT,N) RESULT(PARTH) - REAL, INTENT(IN) :: FIRST,INCREMENT - INTEGER, INTENT(IN) :: N - REAL, DIMENSION(N) :: PARTH -END FUNCTION ARTH -! -FUNCTION gammln(xx) RESULT(pgammln) - REAL, INTENT(IN) :: xx - REAL :: pgammln -END FUNCTION gammln -! -SUBROUTINE GAULAG(x,w,n,alf) - INTEGER, INTENT(IN) :: n - REAL, INTENT(IN) :: alf - REAL, DIMENSION(n), INTENT(INOUT) :: w, x -END SUBROUTINE GAULAG -! -SUBROUTINE GAUHER(x,w,n) - INTEGER, INTENT(IN) :: n - REAL, DIMENSION(n), INTENT(INOUT) :: w, x -END SUBROUTINE GAUHER -! -END INTERFACE -! -END MODULE MODI_LIMA_FUNCTIONS -! -!------------------------------------------------------------------------------ -! -!######################################### -FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC) -!######################################### -! - IMPLICIT NONE -! - LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: LTAB ! Mask - INTEGER, DIMENSION(:), INTENT(INOUT) :: I1,I2,I3 ! Used to replace the COUNT and PACK - INTEGER :: JI,JJ,JK,IC -! - 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 -! -!------------------------------------------------------------------------------ -! -!########################################### -FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG) -!########################################### -! -! auxiliary routine used to compute the Pth moment order of the generalized -! gamma law -! - USE MODI_GAMMA -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PALPHA ! first shape parameter of the dimensionnal distribution - REAL, INTENT(IN) :: PNU ! second shape parameter of the dimensionnal distribution - REAL, INTENT(IN) :: PP ! order of the moment - REAL :: PMOMG ! result: moment of order ZP -! - PMOMG = GAMMA_X0D(PNU+PP/PALPHA)/GAMMA_X0D(PNU) -! -END FUNCTION MOMG -! -!------------------------------------------------------------------------------ -! -!############################################# -FUNCTION RECT(PA,PB,PX,PX1,PX2) RESULT(PRECT) -!############################################# -! -! PRECT takes the value PA if PX1<=PX<PX2, and PB outside the [PX1;PX2[ interval -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, INTENT(IN) :: PX1 - REAL, INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PRECT -! - PRECT(:) = PB - WHERE (PX(:).GE.PX1 .AND. PX(:).LT.PX2) - PRECT(:) = PA - END WHERE - RETURN -! -END FUNCTION RECT -! -!------------------------------------------------------------------------------- -! -!############################################### -FUNCTION DELTA(PA,PB,PX,PX1,PX2) RESULT(PDELTA) -!############################################### -! -! PDELTA takes the value PA if PX<PX1, and PB if PX>=PX2 -! PDELTA is a cubic interpolation between PA and PB for PX between PX1 and PX2 -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, INTENT(IN) :: PX1 - REAL, INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PDELTA -! -!* local variable -! - REAL :: ZA -! - ZA = 6.0*(PA-PB)/(PX2-PX1)**3 - WHERE (PX(:).LT.PX1) - PDELTA(:) = PA - ELSEWHERE (PX(:).GE.PX2) - PDELTA(:) = PB - ELSEWHERE - PDELTA(:) = PA + ZA*PX1**2*(PX1/6.0 - 0.5*PX2) & - + ZA*PX1*PX2* (PX(:)) & - - (0.5*ZA*(PX1+PX2))* (PX(:)**2) & - + (ZA/3.0)* (PX(:)**3) - END WHERE - RETURN -! -END FUNCTION DELTA -! -!------------------------------------------------------------------------------- -! -!####################################################### -FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2) RESULT(PDELTA_VEC) -!####################################################### -! -! Same as DELTA for vectorized PX1 and PX2 arguments -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, DIMENSION(:), INTENT(IN) :: PX1 - REAL, DIMENSION(:), INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PDELTA_VEC -! -!* local variable -! - REAL, DIMENSION(SIZE(PX,1)) :: ZA -! - ZA(:) = 0.0 - wHERE (PX(:)<=PX1(:)) - PDELTA_VEC(:) = PA - ELSEWHERE (PX(:)>=PX2(:)) - PDELTA_VEC(:) = PB - ELSEWHERE - ZA(:) = 6.0*(PA-PB)/(PX2(:)-PX1(:))**3 - PDELTA_VEC(:) = PA + ZA(:)*PX1(:)**2*(PX1(:)/6.0 - 0.5*PX2(:)) & - + ZA(:)*PX1(:)*PX2(:)* (PX(:)) & - - (0.5*ZA(:)*(PX1(:)+PX2(:)))* (PX(:)**2) & - + (ZA(:)/3.0)* (PX(:)**3) - END WHERE - RETURN -! -END FUNCTION DELTA_VEC -! -!------------------------------------------------------------------------------- -! -!####################################################### -FUNCTION ARTH(FIRST,INCREMENT,N) RESULT(PARTH) -!####################################################### - REAL,INTENT(IN) :: FIRST,INCREMENT - INTEGER,INTENT(IN) :: N - REAL,DIMENSION(N) :: PARTH - INTEGER :: K - - DO K=1,N - PARTH(K)=FIRST+INCREMENT*(K-1) - END DO -END FUNCTION ARTH -! -!------------------------------------------------------------------------------- -! -!####################################################### -FUNCTION gammln(xx) RESULT(pgammln) -!####################################################### - - USE MODI_LIMA_FUNCTIONS, ONLY: ARTH - - IMPLICIT NONE - REAL, INTENT(IN) :: xx - REAL :: pgammln - REAL :: tmp,x - REAL :: stp = 2.5066282746310005 - REAL, DIMENSION(6) :: coef = (/76.18009172947146,& - -86.50532032941677,24.01409824083091,& - -1.231739572450155,0.1208650973866179e-2,& - -0.5395239384953e-5/) - x=xx - tmp=x+5.5 - tmp=(x+0.5)*log(tmp)-tmp - pgammln=tmp+log(stp*(1.000000000190015+& - sum(coef(:)/arth(x+1.,1.,size(coef))))/x) -! -END FUNCTION gammln -! -!------------------------------------------------------------------------------- -! -!########################### -SUBROUTINE gaulag(x,w,n,alf) -!########################### - INTEGER, INTENT(IN) :: n - REAL, INTENT(IN) :: alf - INTEGER MAXIT - REAL w(n),x(n) - DOUBLE PRECISION EPS - PARAMETER (EPS=3.D-14,MAXIT=10) - INTEGER i,its,j - REAL ai - DOUBLE PRECISION p1,p2,p3,pp,z,z1 -! - REAL SUMW -! - do 13 i=1,n - if(i.eq.1)then - z=(1.+alf)*(3.+.92*alf)/(1.+2.4*n+1.8*alf) - else if(i.eq.2)then - z=z+(15.+6.25*alf)/(1.+.9*alf+2.5*n) - else - ai=i-2 - z=z+((1.+2.55*ai)/(1.9*ai)+1.26*ai*alf/(1.+3.5*ai))* & - (z-x(i-2))/(1.+.3*alf) - endif - do 12 its=1,MAXIT - p1=1.d0 - p2=0.d0 - do 11 j=1,n - p3=p2 - p2=p1 - p1=((2*j-1+alf-z)*p2-(j-1+alf)*p3)/j -11 continue - pp=(n*p1-(n+alf)*p2)/z - z1=z - z=z1-p1/pp - if(abs(z-z1).le.EPS)goto 1 -12 continue -1 x(i)=z - w(i)=-exp(gammln(alf+n)-gammln(float(n)))/(pp*n*p2) -13 continue -! -! NORMALISATION -! - SUMW = 0.0 - DO 14 I=1,N - SUMW = SUMW + W(I) -14 CONTINUE - DO 15 I=1,N - W(I) = W(I)/SUMW -15 CONTINUE -! - return -END SUBROUTINE gaulag -! -!------------------------------------------------------------------------------ -! -!########################################## -SUBROUTINE gauher(x,w,n) -!########################################## - INTEGER, INTENT(IN) :: n - INTEGER MAXIT - REAL w(n),x(n) - DOUBLE PRECISION EPS,PIM4 - PARAMETER (EPS=3.D-14,PIM4=.7511255444649425D0,MAXIT=10) - INTEGER i,its,j,m - DOUBLE PRECISION p1,p2,p3,pp,z,z1 -! - REAL SUMW -! - m=(n+1)/2 - do 13 i=1,m - if(i.eq.1)then - z=sqrt(float(2*n+1))-1.85575*(2*n+1)**(-.16667) - else if(i.eq.2)then - z=z-1.14*n**.426/z - else if (i.eq.3)then - z=1.86*z-.86*x(1) - else if (i.eq.4)then - z=1.91*z-.91*x(2) - else - z=2.*z-x(i-2) - endif - do 12 its=1,MAXIT - p1=PIM4 - p2=0.d0 - do 11 j=1,n - p3=p2 - p2=p1 - p1=z*sqrt(2.d0/j)*p2-sqrt(dble(j-1)/dble(j))*p3 -11 continue - pp=sqrt(2.d0*n)*p2 - z1=z - z=z1-p1/pp - if(abs(z-z1).le.EPS)goto 1 -12 continue -1 x(i)=z - x(n+1-i)=-z - pp=pp/PIM4 ! NORMALIZATION - w(i)=2.0/(pp*pp) - w(n+1-i)=w(i) -13 continue -! -! NORMALISATION -! - SUMW = 0.0 - DO 14 I=1,N - SUMW = SUMW + W(I) -14 CONTINUE - DO 15 I=1,N - W(I) = W(I)/SUMW -15 CONTINUE -! - return -END SUBROUTINE gauher -! -!------------------------------------------------------------------------------ diff --git a/src/arome/micro/lima_precip_scavenging.F90 b/src/arome/micro/lima_precip_scavenging.F90 deleted file mode 100644 index ad63b968348186447f7a3c7aaa39900ad8345810..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_precip_scavenging.F90 +++ /dev/null @@ -1,848 +0,0 @@ -! ################################## - MODULE MODI_LIMA_PRECIP_SCAVENGING -! ################################## -! -INTERFACE - SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & - PRRT, PRHODREF, PRHODJ, PZZ, & - PPABST, PTHT, PSVT, PRSVS, PINPAP, & - YDDDH, YDLDDH, YDMDDH ) -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! cloud paramerization -INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP ! Double timestep except - ! for the first time step -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain mixing ratio at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Air Density [kg/m**3] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry Density [kg] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Particle Concentration [kg-1] -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP -! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -END SUBROUTINE LIMA_PRECIP_SCAVENGING -END INTERFACE -END MODULE MODI_LIMA_PRECIP_SCAVENGING -! -!######################################################################## - SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & - PRRT, PRHODREF, PRHODJ, PZZ, & - PPABST, PTHT, PSVT, PRSVS, PINPAP , & - YDDDH, YDLDDH, YDMDDH) -!########################################################################x -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the total number -!! below-cloud scavenging rate. -!! -!! -!!** METHOD -!! ------ -!! We assume a generalized gamma distribution law for the raindrop. -!! The aerosols particles distribution follows a log-normal law. -!! First, we have to compute the Collision Efficiency, which takes -!! account of the three most important wet removal mechanism : -!! Brownian diffusion, interception and inertial impaction. -!! It is a function of several number (like Reynolds, Schmidt -!! or Stokes number for instance). Consequently, -!! we need first to calculate these numbers. -!! -!! Then the scavenging coefficient is deduced from the integration -!! of the droplet size distribution, the falling velocity of -!! raindrop and aerosol, their diameter, and the collision -!! (or collection) efficiency, over the spectrum of droplet -!! diameters. -!! -!! The total scavenging rate of aerosol is computed from the -!! integration, over all the spectrum of particles aerosols -!! diameters, of the scavenging coefficient. -!! -!! -!! EXTERNAL -!! -------- -!! Subroutine SCAV_MASS_SEDIMENTATION -!! -!! Function COLL_EFFIC : computes the collision efficiency -!! -!! Function CONTJV | -!! Function GAUHER | -!! Function GAULAG |-> in lima_functions.f90 -!! Function GAMMLN | -!! -!! -!! REFERENCES -!! ---------- -!! Seinfeld and Pandis -!! Andronache -!! -!! AUTHOR -!! ------ -!! 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_CST -USE MODD_PARAMETERS -USE MODI_GAMMA -USE MODI_LIMA_FUNCTIONS -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -! Previous versions by S. Berthet were compatible with all schemes -! Here : Compatibility with LIMA only -USE MODD_PARAM_LIMA, ONLY : NMOD_IFN, NSPECIE, XFRAC, & - XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, & - NMOD_CCN, XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN, & - XALPHAR, XNUR, & - LAERO_MASS, NDIAMR, NDIAMP, XT0SCAV, XTREF, XNDO, & - XMUA0, XT_SUTH_A, XMFPA0, XVISCW, XRHO00, & - XRTMIN, XCTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XCR, XDR -! -USE MODD_BUDGET -USE MODE_BUDGET, ONLY: BUDGET_DDH -! -IMPLICIT NONE -! -!* 0.1 declarations of dummy arguments : -! -CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! cloud paramerization -INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP ! Double timestep except - ! for the first time step -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain mixing ratio at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Air Density [kg/m**3] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry Density [kg] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Particle Concentration [/m**3] -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP -! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -!* 0.2 Declarations of local variables : -! -INTEGER :: IIB ! Define the domain where is -INTEGER :: IIE ! the microphysical sources have to be computed -INTEGER :: IJB ! -INTEGER :: IJE ! -INTEGER :: IKB ! -INTEGER :: IKE ! -! -INTEGER :: JSV ! CCN or IFN mode -INTEGER :: J1, J2, IJ, JMOD -! -LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: GRAIN, &! Test where rain is present - GSCAV ! Test where rain is present -INTEGER , DIMENSION(SIZE(GSCAV)) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics -INTEGER :: ISCAV -! -REAL :: ZDENS_RATIO, & !density ratio - ZNUM, & !PNU-1. - ZSHAPE_FACTOR -! -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)) :: PCRT ! cloud droplet conc. -! -REAL, DIMENSION(:), ALLOCATABLE :: ZLAMBDAR, & !slope parameter of the - ! generalized Gamma - !distribution law for the - !raindrop - ZVISC_RATIO, & !viscosity ratio - ZMFPA, & !Mean Free Path - ZRHODREF, & !Air Density [kg/m**3] - ZVISCA, & !Viscosity of Air [kg/(m*s)] - ZT, & !Absolute Temperature - ZPABST, & - ZRRT, & - ZCONCP, & - ZCONCR, & - ZTOT_SCAV_RATE,& - ZTOT_MASS_RATE,& - ZMEAN_SCAV_COEF -! -REAL, DIMENSION(:,:), ALLOCATABLE :: & - ZVOLDR, & !Mean volumic Raindrop diameter [m] - ZBC_SCAV_COEF, & - ZCUNSLIP, & !CUnningham SLIP correction factor - ZST_STAR, & !critical Stokes number for impaction - ZSC, & !aerosol particle Schmidt number - ZRE, & !raindrop Reynolds number (for radius) - ZFVELR, & !Falling VELocity of the Raindrop - ZRELT, & !RELaxation Time of the particle [s] - ZDIFF !Particle Diffusivity -! -REAL, DIMENSION(NDIAMP) :: ZVOLDP, & !Mean volumic diameter [m] - ZABSCISSP, & !Aerosol Abscisses - ZWEIGHTP !Aerosol Weights -REAL, DIMENSION(NDIAMR) :: ZABSCISSR, & !Raindrop Abscisses - ZWEIGHTR !Raindrop Weights -! -REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOL_EF, &! Collision efficiency - ZSIZE_RATIO, &! Size Ratio - ZST ! Stokes number -! -REAL, DIMENSION(SIZE(PRRT,1),SIZE(PRRT,2),SIZE(PRRT,3)) :: ZRRS -! -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: PMEAN_SCAV_COEF, & !Mean Scavenging - ! Coefficient - PTOT_SCAV_RATE, & !Total Number - ! Scavenging Rate - PTOT_MASS_RATE !Total Mass - ! Scavenging Rate -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3),NDIAMP) & - ::PBC_SCAV_COEF !Scavenging Coefficient -REAL, DIMENSION(:), ALLOCATABLE :: ZKNUDSEN ! Knuudsen number -! -! Opt. BVIE -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZT_3D, ZCONCR_3D, ZVISCA_3D, ZMFPA_3D, & - ZVISC_RATIO_3D, ZLAMBDAR_3D, FACTOR_3D -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3),NDIAMP) & - :: ZVOLDR_3D, ZVOLDR_3D_INV, ZVOLDR_3D_POW, & - ZFVELR_3D, ZRE_3D, ZRE_3D_SQRT, ZST_STAR_3D -REAL, DIMENSION(:), ALLOCATABLE :: FACTOR -REAL, DIMENSION(:,:), ALLOCATABLE :: & - ZRE_SQRT, & ! SQRT of raindrop Reynolds number - ZRE_INV, & ! INV of raindrop Reynolds number - ZSC_INV, & ! INV of aerosol particle Schmidt number - ZSC_SQRT, & ! SQRT of aerosol particle Schmidt number - ZSC_3SQRT, & ! aerosol particle Schmidt number**(1./3.) - ZVOLDR_POW, & ! Mean volumic Raindrop diameter [m] **(2+ZDR) - ZVOLDR_INV ! INV of Mean volumic Raindrop diameter [m] -REAL :: ZDENS_RATIO_SQRT -INTEGER :: SV_VAR, NM, JM -REAL :: XMDIAMP -REAL :: XSIGMAP -REAL :: XRHOP -REAL :: XFRACP -! -! -! -!------------------------------------------------------------------------------ -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -IIB=1+JPHEXT -IIE=SIZE(PRHODREF,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRHODREF,2) - JPHEXT -IKB=1+JPVEXT -IKE=SIZE(PRHODREF,3) - JPVEXT -! -! PCRT -PCRT(:,:,:)=PSVT(:,:,:,NSV_LIMA_NR) -! -! Rain mask -GRAIN(:,:,:) = .FALSE. -GRAIN(IIB:IIE,IJB:IJE,IKB:IKE) = (PRRT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(3) & - .AND. PCRT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(3) ) -! -! Initialize the total mass scavenging rate if LAERO_MASS=T -IF (LAERO_MASS) PTOT_MASS_RATE(:,:,:) = 0. -! -! Quadrature method: compute absissae and weights -CALL GAUHER(ZABSCISSP,ZWEIGHTP,NDIAMP) -ZNUM = XNUR-1.0E0 -CALL GAULAG(ZABSCISSR,ZWEIGHTR,NDIAMR,ZNUM) -! -! -!------------------------------------------------------------------------------ -! -! -!* 2. NUMERICAL OPTIMIZATION -! ---------------------- -! -! -! Optimization : compute in advance parameters depending on rain particles and -! environment conditions only, to avoid multiple identical computations in loops -! -! -ZSHAPE_FACTOR = GAMMA_X0D(XNUR+3./XALPHAR)/GAMMA_X0D(XNUR) -! -WHERE ( GRAIN(:,:,:) ) - ! - ZT_3D(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 )**(XRD/XCPD) - ZCONCR_3D(:,:,:) = PCRT(:,:,:) * PRHODREF(:,:,:) ![/m3] - ! Sutherland law for viscosity of air - ZVISCA_3D(:,:,:) = XMUA0*(ZT_3D(:,:,:)/XTREF)**(3/2)*(XTREF+XT_SUTH_A) & - /(XT_SUTH_A+ZT_3D(:,:,:)) - ! Air mean free path - ZMFPA_3D(:,:,:) = XMFPA0*(XP00*ZT_3D(:,:,:))/(PPABST(:,:,:)*XT0SCAV) - ! Viscosity ratio - ZVISC_RATIO_3D(:,:,:) = ZVISCA_3D(:,:,:)/XVISCW !!!!! inversé par rapport à orig. ! - ! Rain drops parameters - ZLAMBDAR_3D(:,:,:) = ( ((XPI/6.)*ZSHAPE_FACTOR*XRHOLW*ZCONCR_3D(:,:,:)) & - /(PRHODREF(:,:,:)*PRRT(:,:,:)) )**(1./3.) ![/m] - FACTOR_3D(:,:,:) = XPI*0.25*ZCONCR_3D(:,:,:)*XCR*(XRHO00/PRHODREF(:,:,:))**(0.4) - ! -END WHERE -! -DO J2=1,NDIAMR - WHERE ( GRAIN(:,:,:) ) - ! exchange of variables: [m] - ZVOLDR_3D(:,:,:,J2) = ZABSCISSR(J2)**(1./XALPHAR)/ZLAMBDAR_3D(:,:,:) - ZVOLDR_3D_INV(:,:,:,J2) = 1./ZVOLDR_3D(:,:,:,J2) - ZVOLDR_3D_POW(:,:,:,J2) = ZVOLDR_3D(:,:,:,J2)**(2.+XDR) - ! Raindrop Falling VELocity [m/s] - ZFVELR_3D(:,:,:,J2) = XCR*(ZVOLDR_3D(:,:,:,J2)**XDR)*(XRHO00/PRHODREF(:,:,:))**(0.4) - ! Reynolds number - ZRE_3D(:,:,:,J2) = ZVOLDR_3D(:,:,:,J2)*ZFVELR_3D(:,:,:,J2) & - *PRHODREF(:,:,:)/(2.0*ZVISCA_3D(:,:,:)) - ZRE_3D_SQRT(:,:,:,J2) = SQRT( ZRE_3D(:,:,:,J2) ) - ! Critical Stokes number - ZST_STAR_3D(:,:,:,J2) = (1.2+(LOG(1.+ZRE_3D(:,:,:,J2)))/12.) & - /(1.+LOG(1.+ZRE_3D(:,:,:,J2))) - END WHERE -END DO -! -! -!------------------------------------------------------------------------------ -! -! -!* 3. AEROSOL SCAVENGING -! ------------------ -! -! -! Iteration over the aerosol type and mode -! -DO JSV = 1, NMOD_CCN+NMOD_IFN -! - IF (JSV .LE. NMOD_CCN) THEN - JMOD = JSV - SV_VAR = NSV_LIMA_CCN_FREE -1 + JMOD ! Variable number in PSVT - NM = 1 ! Number of species (for IFN int. mixing) - ELSE - JMOD = JSV - NMOD_CCN - SV_VAR = NSV_LIMA_IFN_FREE -1 + JMOD - NM = NSPECIE - END IF -! - PBC_SCAV_COEF(:,:,:,:) = 0. - PMEAN_SCAV_COEF(:,:,:) = 0. - PTOT_SCAV_RATE(:,:,:) = 0. -! - GSCAV(:,:,:) = .FALSE. - GSCAV(IIB:IIE,IJB:IJE,IKB:IKE) =GRAIN(IIB:IIE,IJB:IJE,IKB:IKE) .AND. & - (PSVT(IIB:IIE,IJB:IJE,IKB:IKE,SV_VAR)>1.0E-2) - ISCAV = COUNTJV(GSCAV(:,:,:),I1(:),I2(:),I3(:)) -! - IF( ISCAV>=1 ) THEN - ALLOCATE(ZVISC_RATIO(ISCAV)) - ALLOCATE(ZRHODREF(ISCAV)) - ALLOCATE(ZVISCA(ISCAV)) - ALLOCATE(ZT(ISCAV)) - ALLOCATE(ZRRT(ISCAV)) - ALLOCATE(ZCONCR(ISCAV)) - ALLOCATE(ZLAMBDAR(ISCAV)) - ALLOCATE(ZCONCP(ISCAV)) - ALLOCATE(ZMFPA(ISCAV)) - ALLOCATE(ZTOT_SCAV_RATE(ISCAV)) - ALLOCATE(ZTOT_MASS_RATE(ISCAV)) - ALLOCATE(ZMEAN_SCAV_COEF(ISCAV)) - ALLOCATE(ZPABST(ISCAV)) - ALLOCATE(ZKNUDSEN(ISCAV)) - ALLOCATE(FACTOR(ISCAV)) -! - ALLOCATE(ZCUNSLIP(ISCAV,NDIAMP)) - ALLOCATE(ZBC_SCAV_COEF(ISCAV,NDIAMP)) - ALLOCATE(ZSC(ISCAV,NDIAMP)) - ALLOCATE(ZSC_INV(ISCAV,NDIAMP)) - ALLOCATE(ZSC_SQRT(ISCAV,NDIAMP)) - ALLOCATE(ZSC_3SQRT(ISCAV,NDIAMP)) - ALLOCATE(ZRELT(ISCAV,NDIAMP)) - ALLOCATE(ZDIFF(ISCAV,NDIAMP)) - ALLOCATE(ZVOLDR(ISCAV,NDIAMR)) - ALLOCATE(ZVOLDR_POW(ISCAV,NDIAMR)) - ALLOCATE(ZVOLDR_INV(ISCAV,NDIAMR)) - ALLOCATE(ZRE(ISCAV,NDIAMR)) - ALLOCATE(ZRE_INV(ISCAV,NDIAMR)) - ALLOCATE(ZRE_SQRT(ISCAV,NDIAMR)) - ALLOCATE(ZST_STAR(ISCAV,NDIAMR)) - ALLOCATE(ZFVELR(ISCAV,NDIAMR)) - ALLOCATE(ZST(ISCAV,NDIAMP,NDIAMR)) - ALLOCATE(ZCOL_EF(ISCAV,NDIAMP,NDIAMR)) - ALLOCATE(ZSIZE_RATIO(ISCAV,NDIAMP,NDIAMR)) -! - ZMEAN_SCAV_COEF(:)=0. - ZTOT_SCAV_RATE(:) =0. - ZTOT_MASS_RATE(:) =0. - DO JL=1,ISCAV - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZT(JL) = ZT_3D(I1(JL),I2(JL),I3(JL)) - ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) - ZPABST(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ZCONCP(JL) = PSVT(I1(JL),I2(JL),I3(JL),SV_VAR)*ZRHODREF(JL)![/m3] - ZCONCR(JL) = ZCONCR_3D(I1(JL),I2(JL),I3(JL)) ![/m3] - ZVISCA(JL) = ZVISCA_3D(I1(JL),I2(JL),I3(JL)) - ZMFPA(JL) = ZMFPA_3D(I1(JL),I2(JL),I3(JL)) - ZVISC_RATIO(JL) = ZVISC_RATIO_3D(I1(JL),I2(JL),I3(JL)) - ZLAMBDAR(JL) = ZLAMBDAR_3D(I1(JL),I2(JL),I3(JL)) - FACTOR(JL) = FACTOR_3D(I1(JL),I2(JL),I3(JL)) - ZVOLDR(JL,:) = ZVOLDR_3D(I1(JL),I2(JL),I3(JL),:) - ZVOLDR_POW(JL,:) = ZVOLDR_3D_POW(I1(JL),I2(JL),I3(JL),:) - ZVOLDR_INV(JL,:) = ZVOLDR_3D_INV(I1(JL),I2(JL),I3(JL),:) - ZFVELR(JL,:) = ZFVELR_3D(I1(JL),I2(JL),I3(JL),:) - ZRE(JL,:) = ZRE_3D(I1(JL),I2(JL),I3(JL),:) - ZRE_SQRT(JL,:) = ZRE_3D_SQRT(I1(JL),I2(JL),I3(JL),:) - ZST_STAR(JL,:) = ZST_STAR_3D(I1(JL),I2(JL),I3(JL),:) - ENDDO - ZRE_INV(:,:) = 1./ZRE(:,:) - - IF (ANY(ZCONCR .eq. 0.)) print *, 'valeur nulle dans ZLAMBDAR !' - IF (ANY(ZLAMBDAR .eq. 0.)) print *, 'valeur nulle dans ZLAMBDAR !' -! -!------------------------------------------------------------------------------------ -! -! Loop over the different species (for IFN int. mixing) -! - DO JM = 1, NM ! species (DM1,DM2,BC,O) for IFN - IF ( JSV .LE. NMOD_CCN ) THEN ! CCN case - XRHOP = XRHO_CCN(JMOD) - XMDIAMP = 2*XR_MEAN_CCN(JMOD) - XSIGMAP = EXP(XLOGSIG_CCN(JMOD)) - XFRACP = 1.0 - ELSE ! IFN case - XRHOP = XRHO_IFN(JM) - XMDIAMP = XMDIAM_IFN(JM) - XSIGMAP = XSIGMA_IFN(JM) - XFRACP = XFRAC(JM,JMOD) - END IF - !----------------------------------------------------------------------------- - ! Loop over the aerosols particles diameters (log normal distribution law) : - ! - DO J1=1,NDIAMP - ! exchange of variables: [m] - ZVOLDP(J1) = XMDIAMP * EXP(ZABSCISSP(J1)*SQRT(2.)*LOG(XSIGMAP)) - ! Cunningham slip correction factor (1+alpha*Knudsen) - ZKNUDSEN(:) = MIN( 20.,ZVOLDP(J1)/ZMFPA(:) ) - ZCUNSLIP(:,J1) = 1.0+2.0/ZKNUDSEN(:)*(1.257+0.4*EXP(-0.55*ZKNUDSEN(:))) - ! Diffusion coefficient - ZDIFF(:,J1) = XBOLTZ*ZT(:)*ZCUNSLIP(:,J1)/(3.*XPI*ZVISCA(:)*ZVOLDP(J1)) - ! Schmidt number - ZSC(:,J1) = ZVISCA(:)/(ZRHODREF(:)*ZDIFF(:,J1)) - ZSC_INV(:,J1) = 1./ZSC(:,J1) - ZSC_SQRT(:,J1) = SQRT( ZSC(:,J1) ) - ZSC_3SQRT(:,J1) = ZSC(:,J1)**(1./3.) - ! Characteristic Time Required for reaching terminal velocity - ZRELT(:,J1) = (ZVOLDP(J1)**2)*ZCUNSLIP(:,J1)*XRHOP/(18.*ZVISCA(:)) - ! Density number - ZDENS_RATIO = XRHOP/XRHOLW - ZDENS_RATIO_SQRT = SQRT(ZDENS_RATIO) - ! Initialisation - ZBC_SCAV_COEF(:,J1)=0. - !------------------------------------------------------------------------- - ! Loop over the drops diameters (generalized Gamma distribution) : - ! - DO J2=1,NDIAMR - ! Stokes number - ZST(:,J1,J2) = 2.*ZRELT(:,J1)*(ZFVELR(:,J2)-ZRELT(1,J1)*XG) & - *ZVOLDR_INV(:,J2) - ! Size Ratio - ZSIZE_RATIO(:,J1,J2) = ZVOLDP(J1)*ZVOLDR_INV(:,J2) - ! Collision Efficiency - ZCOL_EF(:,J1,J2) = COLL_EFFI(ZRE, ZRE_INV, ZRE_SQRT, ZSC, ZSC_INV, & - ZSC_SQRT, ZSC_3SQRT, ZST, ZST_STAR, & - ZSIZE_RATIO, ZVISC_RATIO, ZDENS_RATIO_SQRT) - ! Below-Cloud Scavenging Coefficient for a fixed ZVOLDP: [/s] - ZBC_SCAV_COEF(:,J1) = ZBC_SCAV_COEF(:,J1) + & - ZCOL_EF(:,J1,J2) * ZWEIGHTR(J2) * FACTOR(:) * ZVOLDR_POW(:,J2) - END DO - ! End of the loop over the drops diameters - !-------------------------------------------------------------------------- - - ! Total NUMBER Scavenging Rate of aerosol [m**-3.s**-1] - ZTOT_SCAV_RATE(:) = ZTOT_SCAV_RATE(:) - & - ZWEIGHTP(J1)*XFRACP*ZCONCP(:)*ZBC_SCAV_COEF(:,J1) - ! Total MASS Scavenging Rate of aerosol [kg.m**-3.s**-1] - ZTOT_MASS_RATE(:) = ZTOT_MASS_RATE(:) + & - ZWEIGHTP(J1)*XFRACP*ZCONCP(:)*ZBC_SCAV_COEF(:,J1) & - *XPI/6.*XRHOP*(ZVOLDP(J1)**3) - END DO - ! End of the loop over the drops diameters - !-------------------------------------------------------------------------- - - ! Total NUMBER Scavenging Rate of aerosol [m**-3.s**-1] - PTOT_SCAV_RATE(:,:,:)=UNPACK(ZTOT_SCAV_RATE(:),MASK=GSCAV(:,:,:),FIELD=0.0) - ! Free particles (CCN or IFN) [/s]: - PRSVS(:,:,:,SV_VAR) = max(PRSVS(:,:,:,SV_VAR)+PTOT_SCAV_RATE(:,:,:) & - * PRHODJ(:,:,:)/PRHODREF(:,:,:) , 0.0 ) - ! Total MASS Scavenging Rate of aerosol which REACH THE FLOOR because of - ! rain sedimentation [kg.m**-3.s**-1] - IF (LAERO_MASS)THEN - PTOT_MASS_RATE(:,:,:) = PTOT_MASS_RATE(:,:,:) + & - UNPACK(ZTOT_MASS_RATE(:), MASK=GSCAV(:,:,:), FIELD=0.0) - CALL SCAV_MASS_SEDIMENTATION( HCLOUD, PTSTEP, KTCOUNT, PZZ, PRHODJ, & - PRHODREF, PRRT, PSVT(:,:,:,NSV_LIMA_SCAVMASS),& - PRSVS(:,:,:,NSV_LIMA_SCAVMASS), PINPAP ) - PRSVS(:,:,:,NSV_LIMA_SCAVMASS)=PRSVS(:,:,:,NSV_LIMA_SCAVMASS) + & - PTOT_MASS_RATE(:,:,:)*PRHODJ(:,:,:)/PRHODREF(:,:,:) - END IF - ENDDO -! End of the loop over the aerosol species -!-------------------------------------------------------------------------- -! -! -! - DEALLOCATE(FACTOR) - DEALLOCATE(ZSC_INV) - DEALLOCATE(ZSC_SQRT) - DEALLOCATE(ZSC_3SQRT) - DEALLOCATE(ZRE_INV) - DEALLOCATE(ZRE_SQRT) - DEALLOCATE(ZVOLDR_POW) - DEALLOCATE(ZVOLDR_INV) -! - DEALLOCATE(ZFVELR) - DEALLOCATE(ZRE) - DEALLOCATE(ZST_STAR) - DEALLOCATE(ZST) - DEALLOCATE(ZSIZE_RATIO) - DEALLOCATE(ZCOL_EF) - DEALLOCATE(ZVOLDR) - DEALLOCATE(ZDIFF) - DEALLOCATE(ZRELT) - DEALLOCATE(ZSC) - DEALLOCATE(ZCUNSLIP) - DEALLOCATE(ZBC_SCAV_COEF) -! - DEALLOCATE(ZTOT_SCAV_RATE) - DEALLOCATE(ZTOT_MASS_RATE) - DEALLOCATE(ZMEAN_SCAV_COEF) -! - DEALLOCATE(ZRRT) - DEALLOCATE(ZCONCR) - DEALLOCATE(ZLAMBDAR) - DEALLOCATE(ZCONCP) - DEALLOCATE(ZVISC_RATIO) - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZVISCA) - DEALLOCATE(ZPABST) - DEALLOCATE(ZKNUDSEN) - DEALLOCATE(ZT) - DEALLOCATE(ZMFPA) - ENDIF -ENDDO -! -IF (LBUDGET_SV) THEN - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET_DDH ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1), & - 12+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END DO - END IF - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET_DDH ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1), & - 12+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END DO - END IF -END IF -! -!------------------------------------------------------------------------------ -! -! -!* 3. SUBROUTINE AND FUNCTION -! ----------------------- -! -! -CONTAINS -! -!------------------------------------------------------------------------------ -! ########################################################################## - SUBROUTINE SCAV_MASS_SEDIMENTATION( HCLOUD, PTSTEP, KTCOUNT, PZZ, PRHODJ,& - PRHODREF, PRAIN, PSVT_MASS, PRSVS_MASS, PINPAP ) -! ########################################################################## -! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the total mass of aerosol -!! scavenged by precipitations -!! -!! -!!** 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_SEDIMENTATION ) -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 22/07/07 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -USE MODD_CONF -! -USE MODD_PARAM_LIMA, ONLY : XCEXVT, XRTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XBR, XDR, XFSEDRR -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Cloud parameterization -REAL, INTENT(IN) :: PTSTEP ! Time step -INTEGER, INTENT(IN) :: KTCOUNT ! Current time step number -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Height (z) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry Density [kg] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRAIN ! Rain water m.r. source -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSVT_MASS ! Precip. aerosols at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRSVS_MASS ! Precip. aerosols source -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP -! -!* 0.2 Declarations of local variables : -! -INTEGER :: JJ, JK, JN, JRR ! Loop indexes -INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE ! Physical domain -! -REAL :: ZTSPLITR ! Small time step for rain sedimentation -REAL :: ZTSTEP ! Large time step for rain sedimentation -! -! -LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: GSEDIM ! where to compute the SED processes -INTEGER :: ISEDIM -INTEGER , DIMENSION(SIZE(GSEDIM)) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics -! -! -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) & - :: ZW, & ! work array - ZWSED, & ! sedimentation fluxes - ZZS ! Rain water m.r. source -! -REAL, DIMENSION(:), ALLOCATABLE :: ZRRS, & ! Rain water m.r. source - ZRHODREF, & ! RHO Dry REFerence - ZZW ! Work array -! -REAL, DIMENSION(3) :: ZRTMIN -! -! -REAL :: ZVTRMAX, ZDZMIN, ZT -REAL, SAVE :: ZEXSEDR -LOGICAL, SAVE :: GSFIRSTCALL = .TRUE. -INTEGER, SAVE :: ISPLITR -! -!------------------------------------------------------------------------------- -! -!* 1. COMPUTE THE LOOP BOUNDS -! ----------------------- -! -IIB=1+JPHEXT -IIE=SIZE(PZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PZZ,2) - JPHEXT -IKB=1+JPVEXT -IKE=SIZE(PZZ,3) - JPVEXT -! -!------------------------------------------------------------------------------- -! -!* 2. COMPUTE THE SEDIMENTATION (RS) SOURCE -! ------------------------------------- -! -!* 2.1 splitting factor for high Courant number C=v_fall*(del_Z/del_T) -! -firstcall : IF (GSFIRSTCALL) THEN - GSFIRSTCALL = .FALSE. - ZVTRMAX = 10. - ZDZMIN = MINVAL(PZZ(IIB:IIE,IJB:IJE,IKB+1:IKE+1)-PZZ(IIB:IIE,IJB:IJE,IKB:IKE)) - ISPLITR = 1 - SPLIT : DO - ZT = 2.* PTSTEP / FLOAT(ISPLITR) - IF ( ZT * ZVTRMAX / ZDZMIN .LT. 1.) EXIT SPLIT - ISPLITR = ISPLITR + 1 - END DO SPLIT -! - ZEXSEDR = (XBR+XDR+1.0)/(XBR+1.0) -! -END IF firstcall -! -!* 2.2 time splitting loop initialization -! -IF( (KTCOUNT==1) .AND. (CCONF=='START') ) THEN - ZTSPLITR = PTSTEP / FLOAT(ISPLITR) ! Small time step - ZTSTEP = PTSTEP ! Large time step - ELSE - ZTSPLITR= 2. * PTSTEP / FLOAT(ISPLITR) - ZTSTEP = 2. * PTSTEP -END IF -! -!* 2.3 compute the fluxes -! -! optimization by looking for locations where -! the precipitating fields are larger than a minimal value only !!! -! -ZRTMIN(:) = XRTMIN(:) / ZTSTEP -ZZS(:,:,:) = PRAIN(:,:,:) -DO JN = 1 , ISPLITR - GSEDIM(:,:,:) = .FALSE. - GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN(3) -! - ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:)) - IF( ISEDIM >= 1 ) THEN - IF( JN==1 ) THEN - ZZS(:,:,:) = ZZS(:,:,:) * ZTSTEP - 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))) - END IF - ALLOCATE(ZRRS(ISEDIM)) - ALLOCATE(ZRHODREF(ISEDIM)) - DO JL=1,ISEDIM - ZRRS(JL) = ZZS(I1(JL),I2(JL),I3(JL)) - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ENDDO - ALLOCATE(ZZW(ISEDIM)) ; ZZW(:) = 0.0 -! -!* 2.2.1 for rain -! - ZZW(:) = XFSEDRR * ZRRS(:)**(ZEXSEDR) * ZRHODREF(:)**(ZEXSEDR-XCEXVT) - ZWSED(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - DO JK = IKB , IKE - ZZS(:,:,JK) = ZZS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK)) - END DO - IF( JN==1 ) THEN - PINPAP(:,:) = ZWSED(:,:,IKB)* & - ( PSVT_MASS(:,:,IKB)/MAX(ZRTMIN(3),PRRT(:,:,IKB)) ) - END IF - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZRRS) - DEALLOCATE(ZZW) - IF( JN==ISPLITR ) THEN - GSEDIM(:,:,:) = .FALSE. - GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN(3) - ZWSED(:,:,:) = 0.0 - WHERE( GSEDIM(:,:,:) ) - ZWSED(:,:,:) = 1.0/ZTSTEP - PRAIN(:,:,:)/ZZS(:,:,:) - END WHERE - END IF - END IF -END DO -! -! Apply the rain sedimentation rate to the WR_xxx aqueous species -! -PRSVS_MASS(:,:,:) = PRSVS_MASS(:,:,:) + ZWSED(:,:,:)*PSVT_MASS(:,:,:) -! -END SUBROUTINE SCAV_MASS_SEDIMENTATION -! -!------------------------------------------------------------------------------ -! -!################################################################### - FUNCTION COLL_EFFI (PRE, PRE_INV, PRE_SQRT, PSC, PSC_INV, PSC_SQRT, & - PSC_3SQRT, PST, PST_STAR, PSIZE_RATIO, & - PVISC_RATIO, PDENS_RATIO_SQRT) RESULT(PCOL_EF) -!################################################################### -! -!Compute the Raindrop-Aerosol Collision Efficiency -! -!* 0. DECLARATIONS -! --------------- -! - IMPLICIT NONE -! - INTEGER :: I -! - REAL, DIMENSION(:,:), INTENT(IN) :: PRE - REAL, DIMENSION(:,:), INTENT(IN) :: PRE_INV - REAL, DIMENSION(:,:), INTENT(IN) :: PRE_SQRT - REAL, DIMENSION(:,:), INTENT(IN) :: PSC - REAL, DIMENSION(:,:), INTENT(IN) :: PSC_INV - REAL, DIMENSION(:,:), INTENT(IN) :: PSC_SQRT - REAL, DIMENSION(:,:), INTENT(IN) :: PSC_3SQRT - REAL, DIMENSION(:,:), INTENT(IN) :: PST_STAR -! - REAL, DIMENSION(:,:,:), INTENT(IN) :: PST - REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIZE_RATIO -! - REAL, DIMENSION(:), INTENT(IN) :: PVISC_RATIO - REAL, INTENT(IN) :: PDENS_RATIO_SQRT -! - REAL, DIMENSION(SIZE(ZRE,1)) :: PCOL_EF !result : collision efficiency -! -!------------------------------------------------------------------------------- -! - PCOL_EF(:) = (4.*PSC_INV(:,J1)*PRE_INV(:,J2)*(1.+0.4*PRE_SQRT(:,J2) & - *PSC_3SQRT(:,J1)+0.16*PRE_SQRT(:,J2)*PSC_SQRT(:,J1))) & - +(4.*PSIZE_RATIO(:,J1,J2)*(PVISC_RATIO(:) & - +(1.+2.*PRE_SQRT(:,J2))*PSIZE_RATIO(:,J1,J2))) - DO I=1,ISCAV - IF (PST(I,J1,J2)>PST_STAR(I,J2)) THEN - PCOL_EF(I) = PCOL_EF(I) & - +(PDENS_RATIO_SQRT*((PST(I,J1,J2)-PST_STAR(I,J2)) & - /(PST(I,J1,J2)-PST_STAR(I,J2)+2./3.))**(3./2.)) - ENDIF - ENDDO - END FUNCTION COLL_EFFI -! -!------------------------------------------------------------------------------ -! -END SUBROUTINE LIMA_PRECIP_SCAVENGING diff --git a/src/arome/micro/modd_lima_precip_scavengingn.F90 b/src/arome/micro/modd_lima_precip_scavengingn.F90 deleted file mode 100644 index a0866da9d6041ab3a6dedaef08223e9196d63d7a..0000000000000000000000000000000000000000 --- a/src/arome/micro/modd_lima_precip_scavengingn.F90 +++ /dev/null @@ -1,59 +0,0 @@ -! #################################### - MODULE MODD_LIMA_PRECIP_SCAVENGING_n -! #################################### -! -!!**** *MODD_PRECIP_SCAVENGING$n* - declaration of scavenged aerosols -!! precipitating fields -!! -!! PURPOSE -!! ------- -! Stores the INstantaneous and ACcumulated PRecipitating fields of -!! scavenged aerosol by rain -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY: JPMODELMAX -! -IMPLICIT NONE -! -TYPE LIMA_PRECIP_SCAVENGING_t - REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL() - ! Instant and cumul of ground - ! precipitation fields of Scavenged - ! Aerosol Particles -END TYPE LIMA_PRECIP_SCAVENGING_t - -TYPE(LIMA_PRECIP_SCAVENGING_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: PRECIP_SCAVENGING_MODEL - -REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL() - -CONTAINS - -SUBROUTINE LIMA_PRECIP_SCAVENGING_GOTO_MODEL(KFROM, KTO) - INTEGER, INTENT(IN) :: KFROM, KTO - ! - ! Save current state for allocated arrays - PRECIP_SCAVENGING_MODEL(KFROM)%XINPAP=>XINPAP - PRECIP_SCAVENGING_MODEL(KFROM)%XACPAP=>XACPAP - ! - ! Current model is set to model KTO - XINPAP=>PRECIP_SCAVENGING_MODEL(KTO)%XINPAP - XACPAP=>PRECIP_SCAVENGING_MODEL(KTO)%XACPAP - ! -END SUBROUTINE LIMA_PRECIP_SCAVENGING_GOTO_MODEL -! -! -END MODULE MODD_LIMA_PRECIP_SCAVENGING_n diff --git a/src/common/micro/ini_lima_cold_mixed.F90 b/src/common/micro/ini_lima_cold_mixed.F90 index a493f28ee15f1ebe1c524b650e40667a87cb05b7..55303431f6c033e1ae31ab923f02f13b7570af5a 100644 --- a/src/common/micro/ini_lima_cold_mixed.F90 +++ b/src/common/micro/ini_lima_cold_mixed.F90 @@ -70,11 +70,11 @@ USE MODE_RSCOLRG, ONLY: RSCOLRG USE MODE_NRCOLSS, ONLY: NRCOLSS USE MODE_NZCOLX, ONLY: NZCOLX USE MODE_NSCOLRG, ONLY: NSCOLRG -USE MODI_LIMA_READ_XKER_RACCS, ONLY: LIMA_READ_XKER_RACCS -USE MODI_LIMA_READ_XKER_SDRYG, ONLY: LIMA_READ_XKER_SDRYG -USE MODI_LIMA_READ_XKER_RDRYG, ONLY: LIMA_READ_XKER_RDRYG -USE MODI_LIMA_READ_XKER_SWETH, ONLY: LIMA_READ_XKER_SWETH -USE MODI_LIMA_READ_XKER_GWETH, ONLY: LIMA_READ_XKER_GWETH +USE MODE_LIMA_READ_XKER_RACCS, ONLY: LIMA_READ_XKER_RACCS +USE MODE_LIMA_READ_XKER_SDRYG, ONLY: LIMA_READ_XKER_SDRYG +USE MODE_LIMA_READ_XKER_RDRYG, ONLY: LIMA_READ_XKER_RDRYG +USE MODE_LIMA_READ_XKER_SWETH, ONLY: LIMA_READ_XKER_SWETH +USE MODE_LIMA_READ_XKER_GWETH, ONLY: LIMA_READ_XKER_GWETH ! IMPLICIT NONE ! diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90 index 0b59012332465225b9908870b0f22b152d05f5e2..f85bde85b19f4019847185e086d78cae47ad1762 100644 --- a/src/common/micro/lima_adjust_split.F90 +++ b/src/common/micro/lima_adjust_split.F90 @@ -109,7 +109,7 @@ use mode_msg use mode_tools, only: Countjv ! USE MODI_CONDENSATION -USE MODI_LIMA_CCN_ACTIVATION +USE MODE_LIMA_CCN_ACTIVATION, ONLY: LIMA_CCN_ACTIVATION ! IMPLICIT NONE ! diff --git a/src/mesonh/micro/lima_precip_scavenging.f90 b/src/common/micro/lima_precip_scavenging.f90 similarity index 90% rename from src/mesonh/micro/lima_precip_scavenging.f90 rename to src/common/micro/lima_precip_scavenging.f90 index aaabf3f298cc30a22fab869f8602151d82e12897..7739ef866e5effb35e51a415f2b6376e391dc631 100644 --- a/src/mesonh/micro/lima_precip_scavenging.f90 +++ b/src/common/micro/lima_precip_scavenging.f90 @@ -3,42 +3,10 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -! ################################## - MODULE MODI_LIMA_PRECIP_SCAVENGING -! ################################## -! -INTERFACE - SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & - PRRT, PRHODREF, PRHODJ, PZZ, & - PPABST, PTHT, PSVT, PRSVS, PINPAP ) - -use modd_nsv, only: nsv_lima_beg - -CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! cloud paramerization -INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP ! Double timestep except - ! for the first time step -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain mixing ratio at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Air Density [kg/m**3] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry Density [kg] -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -! -REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Particle Concentration [kg-1] -REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP -! -END SUBROUTINE LIMA_PRECIP_SCAVENGING -END INTERFACE -END MODULE MODI_LIMA_PRECIP_SCAVENGING -! !######################################################################## - SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & - PRRT, PRHODREF, PRHODJ, PZZ, & + SUBROUTINE LIMA_PRECIP_SCAVENGING (D, CST, BUCONF, TBUDGETS, KBUDGETS, & + HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & + PRRT, PRHODREF, PRHODJ, PZZ, & PPABST, PTHT, PSVT, PRSVS, PINPAP ) !########################################################################x ! @@ -109,8 +77,9 @@ END MODULE MODI_LIMA_PRECIP_SCAVENGING !* 0.DECLARATIONS ! -------------- ! -use modd_budget, only: lbudget_sv, NBUDGET_SV1, tbudgets -USE MODD_CST +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +use modd_budget, only: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_SV1 +USE MODD_CST, ONLY: CST_t USE MODD_NSV USE MODD_PARAMETERS USE MODD_PARAM_LIMA, ONLY: NMOD_IFN, NSPECIE, XFRAC, & @@ -122,17 +91,23 @@ USE MODD_PARAM_LIMA, ONLY: NMOD_IFN, NSPECIE, XFRAC, XRTMIN, XCTMIN USE MODD_PARAM_LIMA_WARM, ONLY: XCR, XDR -use mode_budget, only: Budget_store_init, Budget_store_end +use mode_budget, only: Budget_store_init_phy, Budget_store_end_phy use mode_tools, only: Countjv USE MODI_GAMMA USE MODI_INI_NSV -USE MODI_LIMA_FUNCTIONS +USE MODE_LIMA_FUNCTIONS, ONLY: GAUHER, GAULAG IMPLICIT NONE ! !* 0.1 declarations of dummy arguments : ! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(CST_t), INTENT(IN) :: CST +TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! cloud paramerization INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing INTEGER, INTENT(IN) :: KTCOUNT ! iteration count @@ -146,8 +121,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t ! -REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN) :: PSVT ! Particle Concentration [/m**3] -REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Particle Concentration [/m**3] +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP ! @@ -252,21 +227,24 @@ REAL :: XSIGMAP REAL :: XRHOP REAL :: XFRACP ! -! +INTEGER :: ISV_LIMA_NR +INTEGER :: ISV_LIMA_SCAVMASS ! !------------------------------------------------------------------------------ +ISV_LIMA_NR = NSV_LIMA_NR - NSV_LIMA_BEG + 1 +ISV_LIMA_SCAVMASS = NSV_LIMA_SCAVMASS - NSV_LIMA_BEG + 1 -if ( lbudget_sv ) then +if ( BUCONF%lbudget_sv ) then do jl = 1, nmod_ccn idx = nsv_lima_ccn_free - 1 + jl - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) + call Budget_store_init_phy(D, tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) end do do jl = 1, nmod_ifn idx = nsv_lima_ifn_free - 1 + jl - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) + call Budget_store_init_phy(D, tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) end do if ( laero_mass ) then - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) ) + call Budget_store_init_phy(D, tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) ) end if end if ! @@ -282,7 +260,7 @@ IKB=1+JPVEXT IKE=SIZE(PRHODREF,3) - JPVEXT ! ! PCRT -PCRT(:,:,:)=PSVT(:,:,:,NSV_LIMA_NR) +PCRT(:,:,:)=PSVT(:,:,:,ISV_LIMA_NR) ! ! Rain mask GRAIN(:,:,:) = .FALSE. @@ -313,19 +291,19 @@ ZSHAPE_FACTOR = GAMMA_X0D(XNUR+3./XALPHAR)/GAMMA_X0D(XNUR) ! WHERE ( GRAIN(:,:,:) ) ! - ZT_3D(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 )**(XRD/XCPD) + ZT_3D(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 )**(CST%XRD/CST%XCPD) ZCONCR_3D(:,:,:) = PCRT(:,:,:) * PRHODREF(:,:,:) ![/m3] ! Sutherland law for viscosity of air ZVISCA_3D(:,:,:) = XMUA0*(ZT_3D(:,:,:)/XTREF)**1.5*(XTREF+XT_SUTH_A) & /(XT_SUTH_A+ZT_3D(:,:,:)) ! Air mean free path - ZMFPA_3D(:,:,:) = XMFPA0*(XP00*ZT_3D(:,:,:))/(PPABST(:,:,:)*XT0SCAV) + ZMFPA_3D(:,:,:) = XMFPA0*(CST%XP00*ZT_3D(:,:,:))/(PPABST(:,:,:)*XT0SCAV) ! Viscosity ratio ZVISC_RATIO_3D(:,:,:) = ZVISCA_3D(:,:,:)/XVISCW !!!!! inversé par rapport à orig. ! ! Rain drops parameters - ZLAMBDAR_3D(:,:,:) = ( ((XPI/6.)*ZSHAPE_FACTOR*XRHOLW*ZCONCR_3D(:,:,:)) & + ZLAMBDAR_3D(:,:,:) = ( ((CST%XPI/6.)*ZSHAPE_FACTOR*CST%XRHOLW*ZCONCR_3D(:,:,:)) & /(PRHODREF(:,:,:)*PRRT(:,:,:)) )**(1./3.) ![/m] - FACTOR_3D(:,:,:) = XPI*0.25*ZCONCR_3D(:,:,:)*XCR*(XRHO00/PRHODREF(:,:,:))**(0.4) + FACTOR_3D(:,:,:) = CST%XPI*0.25*ZCONCR_3D(:,:,:)*XCR*(XRHO00/PRHODREF(:,:,:))**(0.4) ! END WHERE ! @@ -361,11 +339,11 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN ! IF (JSV .LE. NMOD_CCN) THEN JMOD = JSV - SV_VAR = NSV_LIMA_CCN_FREE -1 + JMOD ! Variable number in PSVT + SV_VAR = NSV_LIMA_CCN_FREE - NSV_LIMA_BEG + JMOD ! Variable number in PSVT NM = 1 ! Number of species (for IFN int. mixing) ELSE JMOD = JSV - NMOD_CCN - SV_VAR = NSV_LIMA_IFN_FREE -1 + JMOD + SV_VAR = NSV_LIMA_IFN_FREE - NSV_LIMA_BEG + JMOD NM = NSPECIE END IF ! @@ -469,7 +447,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN ZKNUDSEN(:) = MIN( 20.,ZVOLDP(J1)/ZMFPA(:) ) ZCUNSLIP(:,J1) = 1.0+2.0/ZKNUDSEN(:)*(1.257+0.4*EXP(-0.55*ZKNUDSEN(:))) ! Diffusion coefficient - ZDIFF(:,J1) = XBOLTZ*ZT(:)*ZCUNSLIP(:,J1)/(3.*XPI*ZVISCA(:)*ZVOLDP(J1)) + ZDIFF(:,J1) = CST%XBOLTZ*ZT(:)*ZCUNSLIP(:,J1)/(3.*CST%XPI*ZVISCA(:)*ZVOLDP(J1)) ! Schmidt number ZSC(:,J1) = ZVISCA(:)/(ZRHODREF(:)*ZDIFF(:,J1)) ZSC_INV(:,J1) = 1./ZSC(:,J1) @@ -478,7 +456,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN ! Characteristic Time Required for reaching terminal velocity ZRELT(:,J1) = (ZVOLDP(J1)**2)*ZCUNSLIP(:,J1)*XRHOP/(18.*ZVISCA(:)) ! Density number - ZDENS_RATIO = XRHOP/XRHOLW + ZDENS_RATIO = XRHOP/CST%XRHOLW ZDENS_RATIO_SQRT = SQRT(ZDENS_RATIO) ! Initialisation ZBC_SCAV_COEF(:,J1)=0. @@ -487,7 +465,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN ! DO J2=1,NDIAMR ! Stokes number - ZST(:,J1,J2) = 2.*ZRELT(:,J1)*(ZFVELR(:,J2)-ZRELT(1,J1)*XG) & + ZST(:,J1,J2) = 2.*ZRELT(:,J1)*(ZFVELR(:,J2)-ZRELT(1,J1)*CST%XG) & *ZVOLDR_INV(:,J2) ! Size Ratio ZSIZE_RATIO(:,J1,J2) = ZVOLDP(J1)*ZVOLDR_INV(:,J2) @@ -508,7 +486,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN ! Total MASS Scavenging Rate of aerosol [kg.m**-3.s**-1] ZTOT_MASS_RATE(:) = ZTOT_MASS_RATE(:) + & ZWEIGHTP(J1)*XFRACP*ZCONCP(:)*ZBC_SCAV_COEF(:,J1) & - *XPI/6.*XRHOP*(ZVOLDP(J1)**3) + *CST%XPI/6.*XRHOP*(ZVOLDP(J1)**3) END DO ! End of the loop over the drops diameters !-------------------------------------------------------------------------- @@ -524,9 +502,9 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN PTOT_MASS_RATE(:,:,:) = PTOT_MASS_RATE(:,:,:) + & UNPACK(ZTOT_MASS_RATE(:), MASK=GSCAV(:,:,:), FIELD=0.0) CALL SCAV_MASS_SEDIMENTATION( HCLOUD, PTSTEP, KTCOUNT, PZZ, PRHODJ, & - PRHODREF, PRRT, PSVT(:,:,:,NSV_LIMA_SCAVMASS),& - PRSVS(:,:,:,NSV_LIMA_SCAVMASS), PINPAP ) - PRSVS(:,:,:,NSV_LIMA_SCAVMASS)=PRSVS(:,:,:,NSV_LIMA_SCAVMASS) + & + PRHODREF, PRRT, PSVT(:,:,:,ISV_LIMA_SCAVMASS),& + PRSVS(:,:,:,ISV_LIMA_SCAVMASS), PINPAP ) + PRSVS(:,:,:,ISV_LIMA_SCAVMASS)=PRSVS(:,:,:,ISV_LIMA_SCAVMASS) + & PTOT_MASS_RATE(:,:,:)*PRHODJ(:,:,:)/PRHODREF(:,:,:) END IF ENDDO @@ -575,17 +553,17 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN ENDIF ENDDO ! -if ( lbudget_sv ) then +if ( BUCONF%lbudget_sv ) then do jl = 1, nmod_ccn idx = nsv_lima_ccn_free - 1 + jl - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) + call Budget_store_end_phy(D, tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) end do do jl = 1, nmod_ifn idx = nsv_lima_ifn_free - 1 + jl - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) + call Budget_store_end_phy(D, tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) ) end do if ( laero_mass ) then - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) ) + call Budget_store_end_phy(D, tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) ) end if end if !------------------------------------------------------------------------------ diff --git a/src/mesonh/micro/modd_lima_precip_scavengingn.f90 b/src/common/micro/modd_lima_precip_scavengingn.f90 similarity index 100% rename from src/mesonh/micro/modd_lima_precip_scavengingn.f90 rename to src/common/micro/modd_lima_precip_scavengingn.f90 diff --git a/src/common/micro/mode_lima_functions.F90 b/src/common/micro/mode_lima_functions.F90 index e68fa3e7a3128ba430621d6cd7cf1a73b64ea5b2..c65e6e23cbca066c1e02102e150f1284118134eb 100644 --- a/src/common/micro/mode_lima_functions.F90 +++ b/src/common/micro/mode_lima_functions.F90 @@ -12,132 +12,97 @@ MODULE MODE_LIMA_FUNCTIONS IMPLICIT NONE CONTAINS -!########################################### -FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG) -!########################################### ! -! auxiliary routine used to compute the Pth moment order of the generalized -! gamma law -! - USE MODI_GAMMA -! - IMPLICIT NONE -! - REAL :: PALPHA ! first shape parameter of the dimensionnal distribution - REAL :: PNU ! second shape parameter of the dimensionnal distribution - REAL :: PP ! order of the moment - REAL :: PMOMG ! result: moment of order ZP -! - PMOMG = GAMMA_X0D(PNU+PP/PALPHA)/GAMMA_X0D(PNU) +!------------------------------------------------------------------------------ ! -END FUNCTION MOMG + FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG) +! Pth moment order of the generalized gamma law + USE MODI_GAMMA + IMPLICIT NONE + REAL :: PALPHA ! first shape parameter of the dimensionnal distribution + REAL :: PNU ! second shape parameter of the dimensionnal distribution + REAL :: PP ! order of the moment + REAL :: PMOMG ! result: moment of order ZP + PMOMG = GAMMA_X0D(PNU+PP/PALPHA)/GAMMA_X0D(PNU) + END FUNCTION MOMG ! !------------------------------------------------------------------------------ ! -!############################################# -FUNCTION RECT(PA,PB,PX,PX1,PX2) RESULT(PRECT) -!############################################# -! + FUNCTION RECT(PA,PB,PX,PX1,PX2) RESULT(PRECT) ! PRECT takes the value PA if PX1<=PX<PX2, and PB outside the [PX1;PX2[ interval -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, INTENT(IN) :: PX1 - REAL, INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PRECT -! - PRECT(:) = PB - WHERE (PX(:).GE.PX1 .AND. PX(:).LT.PX2) - PRECT(:) = PA - END WHERE - RETURN -! -END FUNCTION RECT + IMPLICIT NONE + REAL, INTENT(IN) :: PA + REAL, INTENT(IN) :: PB + REAL, DIMENSION(:), INTENT(IN) :: PX + REAL, INTENT(IN) :: PX1 + REAL, INTENT(IN) :: PX2 + REAL, DIMENSION(SIZE(PX,1)) :: PRECT + PRECT(:) = PB + WHERE (PX(:).GE.PX1 .AND. PX(:).LT.PX2) + PRECT(:) = PA + END WHERE + RETURN + END FUNCTION RECT ! !------------------------------------------------------------------------------- ! -!############################################### -FUNCTION DELTA(PA,PB,PX,PX1,PX2) RESULT(PDELTA) -!############################################### -! + FUNCTION DELTA(PA,PB,PX,PX1,PX2) RESULT(PDELTA) ! PDELTA takes the value PA if PX<PX1, and PB if PX>=PX2 ! PDELTA is a cubic interpolation between PA and PB for PX between PX1 and PX2 -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, INTENT(IN) :: PX1 - REAL, INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PDELTA -! -!* local variable -! - REAL :: ZA -! - ZA = 6.0*(PA-PB)/(PX2-PX1)**3 - WHERE (PX(:).LT.PX1) - PDELTA(:) = PA - ELSEWHERE (PX(:).GE.PX2) - PDELTA(:) = PB - ELSEWHERE - PDELTA(:) = PA + ZA*PX1**2*(PX1/6.0 - 0.5*PX2) & - + ZA*PX1*PX2* (PX(:)) & - - (0.5*ZA*(PX1+PX2))* (PX(:)**2) & - + (ZA/3.0)* (PX(:)**3) - END WHERE - RETURN -! -END FUNCTION DELTA + IMPLICIT NONE + REAL, INTENT(IN) :: PA + REAL, INTENT(IN) :: PB + REAL, DIMENSION(:), INTENT(IN) :: PX + REAL, INTENT(IN) :: PX1 + REAL, INTENT(IN) :: PX2 + REAL, DIMENSION(SIZE(PX,1)) :: PDELTA + REAL :: ZA + ZA = 6.0*(PA-PB)/(PX2-PX1)**3 + WHERE (PX(:).LT.PX1) + PDELTA(:) = PA + ELSEWHERE (PX(:).GE.PX2) + PDELTA(:) = PB + ELSEWHERE + PDELTA(:) = PA + ZA*PX1**2*(PX1/6.0 - 0.5*PX2) & + + ZA*PX1*PX2* (PX(:)) & + - (0.5*ZA*(PX1+PX2))* (PX(:)**2) & + + (ZA/3.0)* (PX(:)**3) + END WHERE + RETURN +! + END FUNCTION DELTA ! !------------------------------------------------------------------------------- ! -!####################################################### -FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2) RESULT(PDELTA_VEC) -!####################################################### -! + FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2) RESULT(PDELTA_VEC) ! Same as DELTA for vectorized PX1 and PX2 arguments -! - IMPLICIT NONE -! - REAL, INTENT(IN) :: PA - REAL, INTENT(IN) :: PB - REAL, DIMENSION(:), INTENT(IN) :: PX - REAL, DIMENSION(:), INTENT(IN) :: PX1 - REAL, DIMENSION(:), INTENT(IN) :: PX2 - REAL, DIMENSION(SIZE(PX,1)) :: PDELTA_VEC -! -!* local variable -! - REAL, DIMENSION(SIZE(PX,1)) :: ZA -! - ZA(:) = 0.0 - wHERE (PX(:)<=PX1(:)) - PDELTA_VEC(:) = PA - ELSEWHERE (PX(:)>=PX2(:)) - PDELTA_VEC(:) = PB - ELSEWHERE - ZA(:) = 6.0*(PA-PB)/(PX2(:)-PX1(:))**3 - PDELTA_VEC(:) = PA + ZA(:)*PX1(:)**2*(PX1(:)/6.0 - 0.5*PX2(:)) & - + ZA(:)*PX1(:)*PX2(:)* (PX(:)) & - - (0.5*ZA(:)*(PX1(:)+PX2(:)))* (PX(:)**2) & - + (ZA(:)/3.0)* (PX(:)**3) - END WHERE - RETURN -! -END FUNCTION DELTA_VEC + IMPLICIT NONE + REAL, INTENT(IN) :: PA + REAL, INTENT(IN) :: PB + REAL, DIMENSION(:), INTENT(IN) :: PX + REAL, DIMENSION(:), INTENT(IN) :: PX1 + REAL, DIMENSION(:), INTENT(IN) :: PX2 + REAL, DIMENSION(SIZE(PX,1)) :: PDELTA_VEC + REAL, DIMENSION(SIZE(PX,1)) :: ZA + ZA(:) = 0.0 + wHERE (PX(:)<=PX1(:)) + PDELTA_VEC(:) = PA + ELSEWHERE (PX(:)>=PX2(:)) + PDELTA_VEC(:) = PB + ELSEWHERE + ZA(:) = 6.0*(PA-PB)/(PX2(:)-PX1(:))**3 + PDELTA_VEC(:) = PA + ZA(:)*PX1(:)**2*(PX1(:)/6.0 - 0.5*PX2(:)) & + + ZA(:)*PX1(:)*PX2(:)* (PX(:)) & + - (0.5*ZA(:)*(PX1(:)+PX2(:)))* (PX(:)**2) & + + (ZA(:)/3.0)* (PX(:)**3) + END WHERE + RETURN + END FUNCTION DELTA_VEC ! !------------------------------------------------------------------------------- ! -!########################### SUBROUTINE gaulag(x,w,n,alf) -!########################### use modd_precision, only: MNHREAL64 - INTEGER n,MAXIT REAL alf,w(n),x(n) REAL(kind=MNHREAL64) :: EPS @@ -174,9 +139,7 @@ SUBROUTINE gaulag(x,w,n,alf) 1 x(i)=z w(i)=-exp(gammln(alf+n)-gammln(real(n)))/(pp*n*p2) 13 continue -! ! NORMALISATION -! SUMW = 0.0 DO 14 I=1,N SUMW = SUMW + W(I) @@ -190,11 +153,8 @@ END SUBROUTINE gaulag ! !------------------------------------------------------------------------------ ! -!########################################## SUBROUTINE gauher(x,w,n) -!########################################## use modd_precision, only: MNHREAL64 - INTEGER n,MAXIT REAL w(n),x(n) REAL(kind=MNHREAL64) :: EPS,PIM4 @@ -236,9 +196,7 @@ SUBROUTINE gauher(x,w,n) w(i)=2.0/(pp*pp) w(n+1-i)=w(i) 13 continue -! ! NORMALISATION -! SUMW = 0.0 DO 14 I=1,N SUMW = SUMW + W(I) @@ -251,4 +209,36 @@ SUBROUTINE gauher(x,w,n) END SUBROUTINE gauher ! !------------------------------------------------------------------------------ +! +FUNCTION ARTH(FIRST,INCREMENT,N) + REAL,INTENT(IN) :: FIRST,INCREMENT + INTEGER,INTENT(IN) :: N + REAL,DIMENSION(N) :: ARTH + INTEGER :: K + DO K=1,N + ARTH(K)=FIRST+INCREMENT*(K-1) + END DO +END FUNCTION ARTH +! +!------------------------------------------------------------------------------ +! +FUNCTION gammln(xx) + IMPLICIT NONE + REAL, INTENT(IN) :: xx + REAL :: gammln + REAL :: tmp,x + REAL :: stp = 2.5066282746310005 + REAL, DIMENSION(6) :: coef = (/76.18009172947146,& + -86.50532032941677,24.01409824083091,& + -1.231739572450155,0.1208650973866179e-2,& + -0.5395239384953e-5/) + x=xx + tmp=x+5.5 + tmp=(x+0.5)*log(tmp)-tmp + gammln=tmp+log(stp*(1.000000000190015+& + sum(coef(:)/arth(x+1.,1.,size(coef))))/x) +END FUNCTION gammln +! +!------------------------------------------------------------------------------ +! END MODULE MODE_LIMA_FUNCTIONS diff --git a/src/common/micro/modi_lima_precip_scavenging.f90 b/src/common/micro/modi_lima_precip_scavenging.f90 new file mode 100644 index 0000000000000000000000000000000000000000..918e2982eba4d565648da504c0051aa88922fb34 --- /dev/null +++ b/src/common/micro/modi_lima_precip_scavenging.f90 @@ -0,0 +1,40 @@ +!################################# +MODULE MODI_LIMA_PRECIP_SCAVENGING +!################################# +! + INTERFACE +! + SUBROUTINE LIMA_PRECIP_SCAVENGING (D, CST, BUCONF, TBUDGETS, KBUDGETS, & + HCLOUD, KLUOUT, KTCOUNT, PTSTEP, & + PRRT, PRHODREF, PRHODJ, PZZ, & + PPABST, PTHT, PSVT, PRSVS, PINPAP ) + USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t + use modd_budget, only: TBUDGETDATA,TBUDGETCONF_t + USE MODD_CST, ONLY: CST_t +! + TYPE(DIMPHYEX_t), INTENT(IN) :: D + TYPE(CST_t), INTENT(IN) :: CST + TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF + TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS + INTEGER, INTENT(IN) :: KBUDGETS +! + CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! cloud paramerization + INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing + INTEGER, INTENT(IN) :: KTCOUNT ! iteration count + REAL, INTENT(IN) :: PTSTEP ! Double timestep except + ! for the first time step +! + REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain mixing ratio at t + REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Air Density [kg/m**3] + REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry Density [kg] + REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude + REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure at t + REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t +! + REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Particle Concentration [/m**3] + REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Total Number Scavenging Rate +! + REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPAP + END SUBROUTINE LIMA_PRECIP_SCAVENGING + END INTERFACE +END MODULE MODI_LIMA_PRECIP_SCAVENGING diff --git a/src/mesonh/ext/modeln.f90 b/src/mesonh/ext/modeln.f90 index d1f6da84bd60cf9771f89e13f426e058d8284ba9..555b3cef2c31dbba4a3d3e383c3ba258813b5b46 100644 --- a/src/mesonh/ext/modeln.f90 +++ b/src/mesonh/ext/modeln.f90 @@ -298,7 +298,7 @@ USE MODD_BLOWSNOW USE MODD_BLOWSNOW_n use modd_budget, only: cbutype, lbu_ru, lbu_rv, lbu_rw, lbudget_u, lbudget_v, lbudget_w, lbudget_sv, lbu_enable, & NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_SV1, nbumod, nbutime, & - tbudgets, tburhodj, & + tbudgets, tbuconf, tburhodj, & xtime_bu, xtime_bu_process USE MODD_CH_AERO_n, ONLY: XSOLORG, XMI USE MODD_CH_MNHC_n, ONLY: LUSECHEM,LCH_CONV_LINOX,LUSECHAQ,LUSECHIC, & @@ -307,9 +307,11 @@ USE MODD_CLOUD_MF_n USE MODD_CLOUDPAR_n USE MODD_CONF USE MODD_CONF_n +USE MODD_CST, ONLY: CST USE MODD_CURVCOR_n USE MODD_DEEP_CONVECTION_n USE MODD_DIM_n +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_DRAG_n USE MODD_DUST, ONLY: LDUST USE MODD_DYN @@ -567,6 +569,7 @@ REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER) :: ZWETDE ! TYPE(TFILEDATA),POINTER :: TZOUTFILE ! TYPE(TFILEDATA),SAVE :: TZDIACFILE +TYPE(DIMPHYEX_t) :: YLDIMPHYEX !------------------------------------------------------------------------------- ! TPBAKFILE=> NULL() @@ -2005,10 +2008,11 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN ! Lessivage des CCN et IFN nucléables par Slinn ! IF (LSCAV .AND. (CCLOUD == 'LIMA')) THEN - CALL LIMA_PRECIP_SCAVENGING(CCLOUD, ILUOUT, KTCOUNT,XTSTEP,XRT(:,:,:,3), & - XRHODREF, XRHODJ, XZZ, XPABST, XTHT, & - XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - XRSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), XINPAP ) + CALL LIMA_PRECIP_SCAVENGING( YLDIMPHYEX,CST,TBUCONF,TBUDGETS,SIZE(TBUDGETS), & + CCLOUD, ILUOUT, KTCOUNT,XTSTEP,XRT(:,:,:,3), & + XRHODREF, XRHODJ, XZZ, XPABST, XTHT, & + XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + XRSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), XINPAP ) ! XACPAP(:,:) = XACPAP(:,:) + XINPAP(:,:) * XTSTEP END IF diff --git a/src/mesonh/micro/lima_adjust.f90 b/src/mesonh/micro/lima_adjust.f90 index da2ff335af989658c42a05c28a96e4a863e96c6e..abfe49fb7ebc640c3de1588cc78a245db2e6745a 100644 --- a/src/mesonh/micro/lima_adjust.f90 +++ b/src/mesonh/micro/lima_adjust.f90 @@ -168,8 +168,8 @@ use mode_tools, only: Countjv ! USE MODI_CONDENS USE MODI_CONDENSATION -USE MODI_LIMA_FUNCTIONS -USE MODI_LIMA_CCN_ACTIVATION +USE MODE_LIMA_FUNCTIONS +USE MODE_LIMA_CCN_ACTIVATION, ONLY: LIMA_CCN_ACTIVATION ! IMPLICIT NONE ! diff --git a/src/mesonh/micro/lima_phillips.f90 b/src/mesonh/micro/lima_phillips.f90 index c3d084599b9499941fbaf1f2fa742fc8e64b1d93..2374f6725e657d915e3dce6501dab6ff527b0025 100644 --- a/src/mesonh/micro/lima_phillips.f90 +++ b/src/mesonh/micro/lima_phillips.f90 @@ -142,8 +142,8 @@ USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0 use mode_budget, only: Budget_store_init, Budget_store_end use mode_tools, only: Countjv -USE MODI_LIMA_PHILLIPS_INTEG -USE MODI_LIMA_PHILLIPS_REF_SPECTRUM +USE MODE_LIMA_PHILLIPS_INTEG, ONLY: LIMA_PHILLIPS_INTEG +USE MODE_LIMA_PHILLIPS_REF_SPECTRUM, ONLY: LIMA_PHILLIPS_REF_SPECTRUM IMPLICIT NONE !