From 3a1f79db6aaf1905a5fd84dacd56e3efa3a85e1d Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Fri, 19 Apr 2019 10:36:38 +0200 Subject: [PATCH] Quentin 19/04/2019: corrections in LIMA with respect to rhodref use (minor) (cherry picked from commit ed03cd89f4cd8d1551fbcdb8fa1e8d9ecfbbd5b9) --- src/MNH/lima_cold_sedimentation.f90 | 12 +++------- src/MNH/lima_cold_slow_processes.f90 | 10 +++------ src/MNH/lima_graupel_deposition.f90 | 32 ++++++++++++++------------- src/MNH/lima_ice_aggregation_snow.f90 | 8 ++++--- src/MNH/lima_ice_snow_deposition.f90 | 4 ++-- src/MNH/lima_mixed_slow_processes.f90 | 4 +--- src/MNH/lima_sedimentation.f90 | 4 +--- src/MNH/lima_tendencies.f90 | 4 ++-- 8 files changed, 34 insertions(+), 44 deletions(-) diff --git a/src/MNH/lima_cold_sedimentation.f90 b/src/MNH/lima_cold_sedimentation.f90 index 2764324ee..c81d3924f 100644 --- a/src/MNH/lima_cold_sedimentation.f90 +++ b/src/MNH/lima_cold_sedimentation.f90 @@ -263,9 +263,7 @@ DO JN = 1 , KSPLITG ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL)) END DO WHERE( ZRSS(:)>XRTMIN(5) ) -! Correction BVIE ZRHODREF -! ZZW(:) = XFSEDS * ZRSS(:)**XEXSEDS * ZRHODREF(:)**(XEXSEDS-XCEXVT) - ZZW(:) = XFSEDS * ZRSS(:)**XEXSEDS * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:) + ZZW(:) = XFSEDS * (ZRSS(:)*ZRHODREF(:))**XEXSEDS * ZRHODREF(:)**(-XCEXVT) END WHERE ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRSS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) ) @@ -289,9 +287,7 @@ DO JN = 1 , KSPLITG ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL)) END DO WHERE( ZRGS(:)>XRTMIN(6) ) -! Correction BVIE ZRHODREF -! ZZW(:) = XFSEDG * ZRGS(:)**XEXSEDG * ZRHODREF(:)**(XEXSEDG-XCEXVT) - ZZW(:) = XFSEDG * ZRGS(:)**XEXSEDG * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:) + ZZW(:) = XFSEDG * (ZRGS(:)*ZRHODREF(:))**XEXSEDG * ZRHODREF(:)**(-XCEXVT) END WHERE ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRGS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) ) @@ -315,9 +311,7 @@ DO JN = 1 , KSPLITG ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL)) END DO WHERE( ZRHS(:)>XRTMIN(7) ) -! Correction BVIE ZRHODREF -! ZZW(:) = XFSEDH * ZRHS(:)**XEXSEDH * ZRHODREF(:)**(XEXSEDH-XCEXVT) - ZZW(:) = XFSEDH * ZRHS(:)**XEXSEDH * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:) + ZZW(:) = XFSEDH * (ZRHS(:)*ZRHODREF(:))**XEXSEDH * ZRHODREF(:)**(-XCEXVT) END WHERE ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRHS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) ) diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90 index 08ad1dc79..0aeb16cfc 100644 --- a/src/MNH/lima_cold_slow_processes.f90 +++ b/src/MNH/lima_cold_slow_processes.f90 @@ -339,11 +339,9 @@ IF( IMICRO >= 1 ) THEN WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) & .AND. (ZSSI(:)<0.0) ) ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS) - ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS) * (ZZW(:)**XNUI) & + ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:) * (ZZW(:)**XNUI) & * EXP(-ZZW(:)) ! -! Correction BVIE RHODREF -! ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:)/ZRHODREF(:),ZRSS(:) ) ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:),ZRSS(:) ) ZRIS(:) = ZRIS(:) + ZZW(:) ZRSS(:) = ZRSS(:) - ZZW(:) @@ -372,9 +370,7 @@ IF( IMICRO >= 1 ) THEN ! ZZW(:) = 0.0 WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) ) -!Correction BVIE rhodref -! ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & - ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) * & + ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & ( X0DEPS*ZLBDAS(:)**XEX0DEPS + X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) @@ -440,7 +436,7 @@ IF( IMICRO >= 1 ) THEN WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) & .AND. (ZCIS(:)>ZCTMIN(4)) ) ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3 - ZZW1(:,1) = (ZCIT(:)*(XCCS*ZLBDAS(:)**XCXS)*EXP( XCOLEXIS*(ZZT(:)-XTT) )) & + ZZW1(:,1) = (ZCIT(:)*(XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:)*EXP( XCOLEXIS*(ZZT(:)-XTT) )) & / (ZLBDAI(:)**3) ZZW1(:,2) = MIN( ZZW1(:,1)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:,3)),ZCIS(:) ) ZCIS(:) = ZCIS(:) - ZZW1(:,2) diff --git a/src/MNH/lima_graupel_deposition.f90 b/src/MNH/lima_graupel_deposition.f90 index 85fbbe915..4c042364d 100644 --- a/src/MNH/lima_graupel_deposition.f90 +++ b/src/MNH/lima_graupel_deposition.f90 @@ -7,19 +7,20 @@ ! ################################# ! INTERFACE - SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, & + SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF, & PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, & P_TH_DEPG, P_RG_DEPG, & PA_TH, PA_RV, PA_RG ) ! LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! -REAL, DIMENSION(:), INTENT(IN) :: PAI ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! +REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Cloud water C. at t +REAL, DIMENSION(:), INTENT(IN) :: PSSI ! +REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! +REAL, DIMENSION(:), INTENT(IN) :: PAI ! +REAL, DIMENSION(:), INTENT(IN) :: PCJ ! +REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPG REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DEPG @@ -33,7 +34,7 @@ END INTERFACE END MODULE MODI_LIMA_GRAUPEL_DEPOSITION ! ! ########################################################################### - SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, & + SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF, & PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, & P_TH_DEPG, P_RG_DEPG, & PA_TH, PA_RV, PA_RG ) @@ -68,13 +69,14 @@ IMPLICIT NONE !* 0.1 Declarations of dummy arguments : ! LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! -REAL, DIMENSION(:), INTENT(IN) :: PAI ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! +REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Cloud water C. at t +REAL, DIMENSION(:), INTENT(IN) :: PSSI ! +REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! +REAL, DIMENSION(:), INTENT(IN) :: PAI ! +REAL, DIMENSION(:), INTENT(IN) :: PCJ ! +REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPG REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DEPG @@ -93,7 +95,7 @@ REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG P_TH_DEPG(:) = 0.0 P_RG_DEPG(:) = 0.0 WHERE ( (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) ) - P_RG_DEPG(:) = ( PSSI(:)/(PAI(:)) ) * & + P_RG_DEPG(:) = ( PSSI(:)/PAI(:)/PRHODREF(:) ) * & ( X0DEPG*PLBDG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) P_TH_DEPG(:) = P_RG_DEPG(:)*PLSFACT(:) END WHERE diff --git a/src/MNH/lima_ice_aggregation_snow.f90 b/src/MNH/lima_ice_aggregation_snow.f90 index 15c1d699c..09ebc41dc 100644 --- a/src/MNH/lima_ice_aggregation_snow.f90 +++ b/src/MNH/lima_ice_aggregation_snow.f90 @@ -8,7 +8,7 @@ ! INTERFACE SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE, & - PT, & + PT, PRHODREF, & PRIT, PRST, PCIT, PLBDI, PLBDS, & P_RI_AGGS, P_CI_AGGS, & PA_RI, PA_CI, PA_RS ) @@ -16,6 +16,7 @@ INTERFACE LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! REAL, DIMENSION(:), INTENT(IN) :: PT +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! REAL, DIMENSION(:), INTENT(IN) :: PRIT REAL, DIMENSION(:), INTENT(IN) :: PRST @@ -36,7 +37,7 @@ END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW ! ! ####################################################################### SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE, & - PT, & + PT, PRHODREF, & PRIT, PRST, PCIT, PLBDI, PLBDS, & P_RI_AGGS, P_CI_AGGS, & PA_RI, PA_CI, PA_RS ) @@ -74,6 +75,7 @@ IMPLICIT NONE LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! REAL, DIMENSION(:), INTENT(IN) :: PT +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! REAL, DIMENSION(:), INTENT(IN) :: PRIT REAL, DIMENSION(:), INTENT(IN) :: PRST @@ -108,7 +110,7 @@ P_CI_AGGS(:) = 0. ! WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) ZZW1(:) = (PLBDI(:) / PLBDS(:))**3 - ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)*EXP( XCOLEXIS*(PT(:)-XTT) )) & + ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*EXP( XCOLEXIS*(PT(:)-XTT) )) & / (PLBDI(:)**3) ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:)) ! diff --git a/src/MNH/lima_ice_snow_deposition.f90 b/src/MNH/lima_ice_snow_deposition.f90 index 7563412ba..4d92b528a 100644 --- a/src/MNH/lima_ice_snow_deposition.f90 +++ b/src/MNH/lima_ice_snow_deposition.f90 @@ -166,7 +166,7 @@ WHERE( GMICRO ) WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) & .AND. (PSSI(:)<0.0) ) ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS) - ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS) * (ZZW(:)**XNUS) * EXP(-ZZW(:)) + ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS)/PRHODREF(:) * (ZZW(:)**XNUS) * EXP(-ZZW(:)) ! ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) ! @@ -187,7 +187,7 @@ WHERE( GMICRO ) ! ZZW(:) = 0.0 WHERE ( (PRST(:)>XRTMIN(5)) ) - ZZW(:) = ( PSSI(:)/(PAI(:)) ) * & + ZZW(:) = ( PSSI(:)/(PAI(:))/PRHODREF(:) ) * & ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) END WHERE diff --git a/src/MNH/lima_mixed_slow_processes.f90 b/src/MNH/lima_mixed_slow_processes.f90 index 3e217b691..7c58f4910 100644 --- a/src/MNH/lima_mixed_slow_processes.f90 +++ b/src/MNH/lima_mixed_slow_processes.f90 @@ -181,9 +181,7 @@ INTEGER :: JMOD_IFN IF (LSNOW) THEN ZZW(:) = 0.0 WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) ) -!Correction BVIE RHODREF -! ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & - ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) * & + ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) * & ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) diff --git a/src/MNH/lima_sedimentation.f90 b/src/MNH/lima_sedimentation.f90 index 36b173a84..b64244b29 100644 --- a/src/MNH/lima_sedimentation.f90 +++ b/src/MNH/lima_sedimentation.f90 @@ -67,9 +67,7 @@ END MODULE MODI_LIMA_SEDIMENTATION !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA_COLD, ONLY : XLBEXI, XLBI, XDI, & - XFSEDRI, XFSEDCI, XFSEDS, XEXSEDS -USE MODD_PARAM_LIMA_MIXED, ONLY : XFSEDG, XEXSEDG, XFSEDH, XEXSEDH +USE MODD_PARAM_LIMA_COLD, ONLY : XLBEXI, XLBI, XDI USE MODD_PARAM_LIMA, ONLY : XCEXVT, XRTMIN, XCTMIN, NSPLITSED, & XLB, XLBEX, XD, XFSEDR, XFSEDC, & XALPHAC, XNUC diff --git a/src/MNH/lima_tendencies.f90 b/src/MNH/lima_tendencies.f90 index cb1cf7d00..b66b19c3d 100644 --- a/src/MNH/lima_tendencies.f90 +++ b/src/MNH/lima_tendencies.f90 @@ -550,14 +550,14 @@ ZLBDS(:) = MIN( XLBDAS_MAX, ZLBDS(:)) ! IF (LCOLD .AND. LSNOW) THEN CALL LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE, & - ZT, & + ZT, PRHODREF, & PRIT, PRST, PCIT, ZLBDI, ZLBDS, & P_RI_AGGS, P_CI_AGGS, & PA_RI, PA_CI, PA_RS ) END IF ! IF (LWARM .AND. LCOLD) THEN - CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, & + CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF, & PRGT, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, & P_TH_DEPG, P_RG_DEPG, & PA_TH, PA_RV, PA_RG ) -- GitLab