diff --git a/src/MNH/ch_convect_scavenging.f90 b/src/MNH/ch_convect_scavenging.f90 index 7cc44c218a9c167988b33e5511177b801ce0bb16..a0bfccfd63a1dac9b3f8404c9819fd294e5d777c 100644 --- a/src/MNH/ch_convect_scavenging.f90 +++ b/src/MNH/ch_convect_scavenging.f90 @@ -103,8 +103,9 @@ END MODULE MODI_CH_CONVECT_SCAVENGING !! MODIFICATIONS !! ------------- !! -!! Original 10/04/00 -!! P. Tulet 25/04/05 Aerosols/ Dust scavenging +!! Original 10/04/2000 +!! P. Tulet 25/04/2005 Aerosols/ Dust scavenging +!! J. Pianezze 23/06/2017 Add effic_salt !! !! !------------------------------------------------------------------------------- @@ -132,6 +133,7 @@ USE MODE_SALT_PSD USE MODE_AERO_PSD USE MODE_MODELN_HANDLER USE MODI_EFFIC_DUST +USE MODI_EFFIC_SALT USE MODI_EFFIC_AERO ! IMPLICIT NONE @@ -211,6 +213,7 @@ REAL, DIMENSION(KLON,KLEV) :: ZPARTAERO REAL :: ZHP REAL, DIMENSION(KLON,1,KLEV,JPMODE) :: ZRGAER,ZSIGAER, ZNAER, ZBCMIN REAL, DIMENSION(KLON,1,KLEV,NMODE_DST) :: ZEFFIC_DST +REAL, DIMENSION(KLON,1,KLEV,NMODE_SLT) :: ZEFFIC_SLT REAL, DIMENSION(KLON,1,KLEV,JPMODE) :: ZEFFIC_AER REAL, DIMENSION(KLON,1,KLEV,NMODE_DST) :: ZRGDST,ZSIGDST,ZNDST, ZMINMASS_DST,ZRGDSTMIN REAL, DIMENSION(KLON,1,KLEV,NMODE_SLT) :: ZRGSLT,ZSIGSLT,ZNSLT, ZMINMASS_SLT,ZRGSLTMIN @@ -480,17 +483,17 @@ IF (LSALT) THEN ZPABST(:,1,:) = PPABST(:,:) ZURR(:,1,:) = PURR(:,:) ZCH1(:,1,:,:) = PCH1(:,:,:) - ZEFFIC_DST(:,:,:,:) = 0. - CALL EFFIC_DUST(ZTHT,ZRHODREF,ZPABST,& - ZURR,ZCH1(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZEFFIC_DST) - ZEFFIC_DST(:,:,:,:) = MAX(MIN(ZEFFIC_DST(:,:,:,:), 1.),0.) + ZEFFIC_SLT(:,:,:,:) = 0. + CALL EFFIC_SALT(ZTHT,ZRHODREF,ZPABST,& + ZURR,ZCH1(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZEFFIC_SLT) + ZEFFIC_SLT(:,:,:,:) = MAX(MIN(ZEFFIC_SLT(:,:,:,:), 1.),0.) DO JN=1,NMODE_SLT IF (LVARSIG_SLT) THEN - ZPARTSCAV(:,:,NSV_SLTBEG-1+2+(JN-1)*3) = (ZPROR(:,:) * ZEFFIC_DST(:,1,:,JN)) + ZPARTSCAV(:,:,NSV_SLTBEG-1+2+(JN-1)*3) = (ZPROR(:,:) * ZEFFIC_SLT(:,1,:,JN)) ELSE IF (LRGFIX_SLT) THEN - ZPARTSCAV(:,:,NSV_SLTBEG+JN-1) = (ZPROR(:,:) * ZEFFIC_DST(:,1,:,JN)) + ZPARTSCAV(:,:,NSV_SLTBEG+JN-1) = (ZPROR(:,:) * ZEFFIC_SLT(:,1,:,JN)) ELSE - ZPARTSCAV(:,:,NSV_SLTBEG-1+2+(JN-1)*2) = (ZPROR(:,:) * ZEFFIC_DST(:,1,:,JN)) + ZPARTSCAV(:,:,NSV_SLTBEG-1+2+(JN-1)*2) = (ZPROR(:,:) * ZEFFIC_SLT(:,1,:,JN)) END IF ENDDO END IF diff --git a/src/MNH/effic_salt.f90 b/src/MNH/effic_salt.f90 new file mode 100644 index 0000000000000000000000000000000000000000..71ee6dfc2ef9b7c6e9d84509b606551e4f30499d --- /dev/null +++ b/src/MNH/effic_salt.f90 @@ -0,0 +1,147 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ $Date$ +!----------------------------------------------------------------- +!! ############################## + MODULE MODI_EFFIC_SALT +!! ############################## +!! +INTERFACE +! +SUBROUTINE EFFIC_SALT( & + PTHT & !I [K] theta + ,PRHODREF & !I [kg/m3] air density + ,PPABST & !I [Pa] pressure + ,PURR & !I + ,PSVT & !I [scalar variable, ppp] sea salt concentration + ,PEFFIC & !O [scalar variable, ppp] sea salt concentration + ) + +IMPLICIT NONE + +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT,PRHODREF +REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST +REAL, DIMENSION(:,:,:), INTENT(IN) :: PURR +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT !scalar variable +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PEFFIC !scavenging efficiency + + +END SUBROUTINE EFFIC_SALT +!! +END INTERFACE +!! +END MODULE MODI_EFFIC_SALT +!! +!! ####################################### + SUBROUTINE EFFIC_SALT(PTHT,PRHODREF,& + PPABST,PURR,PSVT,PEFFIC) +!! ####################################### +!! +!! PURPOSE +!! ------- +!! +!! REFERENCE +!! --------- +!! none +!! +!! AUTHOR +!! ------ +!! Pierre TULET & Joris PIANEZZE (LACy) +!! +!! MODIFICATIONS +!! ------------- +!! Original +!! +! Entry variables: +! +! PSVTS(INOUT) -Array of moments included in PSVTS +! +!************************************************************* +! Exit variables: +! +!************************************************************* +! Variables used during the deposition velocity calculation +! +! ZVGK -Polydisperse settling velocity of the kth moment (m/s) +!************************************************************ +!! +!! IMPLICIT ARGUMENTS +! +! +USE MODD_CSTS_SALT +USE MODD_SALT +USE MODI_SALT_VELGRAV +USE MODI_AER_EFFIC3D +USE MODD_CST, ONLY : XP00, XRD +USE MODD_PARAMETERS , ONLY : JPVEXT +USE MODE_SALT_PSD +! +IMPLICIT NONE +! +!* 0.1 declarations of arguments +! +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT,PRHODREF +REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST +REAL, DIMENSION(:,:,:), INTENT(IN) :: PURR +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT !scalar variable +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PEFFIC !scavenging efficiency +! +!* 0.2 declarations of local variables +! +REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),NMODE_SLT) :: ZRG, ZSIG, ZDENSITY_AER +REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),SIZE(PSVT,4)):: ZSVT + +REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3)) :: ZMU,ZMUW, ZTEMP +REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),3*NMODE_SLT) :: ZVGK, ZDPK +REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),NMODE_SLT) :: ZVG, ZDPG, ZCOR +REAL :: ZRHOI +REAL :: A0, A1, A2, A3 ! Constants for computing viscosity +! +!* 0.3 initialize constant +! +ZRHOI = XDENSITY_SALT +ZSVT(:,:,:,:) = PSVT(:,:,:,:) + +CALL PPP2SALT(ZSVT, PRHODREF, PSIG3D=ZSIG, PRG3D=ZRG) +! +CALL SALT_VELGRAV(ZSIG, ZRG, PTHT, PPABST, PRHODREF, ZRHOI, & + ZMU, ZVGK, ZDPK, ZVG, ZDPG, PCOR=ZCOR, PTEMP=ZTEMP) +! +!calcul de ZMUW + +A0=1.76 +A1=-5.5721e-2 +A2=-1.3943e-3 +A3=-4.3015e-5 +ZMUW(:,:,:)=A0*EXP(A1*(ZTEMP(:,:,:)-273.15) & + +A2*(ZTEMP(:,:,:)-273.15) + A3*(ZTEMP(:,:,:)-273.15))*1.e-3 + +A1=-3.5254e-2 +A2=4.7163e-4 +A3=-6.0667e-6 + + WHERE(ZTEMP(:,:,:)>273.15) + ZMUW(:,:,:)=A0*EXP(A1*(ZTEMP(:,:,:)-273.15) & + +A2*(ZTEMP(:,:,:)-273.15) + A3*(ZTEMP(:,:,:)-273.15))*1.e-3 + + END WHERE + ZMUW(:,:,:)=MAX(ZMUW(:,:,:),1.e-12) + +ZDENSITY_AER(:,:,:,:) = XDENSITY_SALT + +CALL AER_EFFIC3D(ZRG,ZVG, & + PRHODREF, & + ZMUW, ZMU, & + ZDPG, & + PURR, & + NMODE_SLT, & + ZTEMP, ZCOR, & + ZDENSITY_AER,& + PEFFIC ) + +END SUBROUTINE EFFIC_SALT