diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index bbf18295df5a8af4e471dcc740d58fafb6729a33..5b344b8f45db1a6b5b95061f8afa655e740ed401 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -24,3 +24,5 @@ phyex/micro/ice4_fast_ri.F90 phyex/micro/modi_ice4_fast_ri.F90 phyex/micro/ice4_rsrimcg_old.F90 phyex/micro/modi_ice4_rsrimcg_old.F90 +phyex/micro/ice4_warm.F90 +phyex/micro/modi_ice4_warm.F90 diff --git a/src/arome/micro/ice4_tendencies.F90 b/src/arome/micro/ice4_tendencies.F90 index d51e07a908c107535ec7b52ae761a7f57f796310..3030684fe4c79584175a2e47988f608176369013 100644 --- a/src/arome/micro/ice4_tendencies.F90 +++ b/src/arome/micro/ice4_tendencies.F90 @@ -48,7 +48,7 @@ USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD USE MODI_ICE4_COMPUTE_PDF USE MODI_ICE4_RAINFR_VERT USE MODI_ICE4_SLOW -USE MODI_ICE4_WARM +USE MODE_ICE4_WARM, ONLY: ICE4_WARM USE MODI_ICE4_FAST_RS USE MODI_ICE4_FAST_RG USE MODI_ICE4_FAST_RH diff --git a/src/arome/micro/ice4_warm.F90 b/src/arome/micro/ice4_warm.F90 deleted file mode 100644 index e08ff2a6c4db60fd3b14ba17ad78bb11bfba9e06..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_warm.F90 +++ /dev/null @@ -1,274 +0,0 @@ -SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &PRHODREF, PLVFACT, PT, PPRES, PTHT, & - &PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & - &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - &PCF, PRF, & - &PRVT, PRCT, PRRT, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PA_TH, PA_RV, PA_RC, PA_RR) -!! -!!** PURPOSE -!! ------- -!! Computes the warm process -!! -!! AUTHOR -!! ------ -!! S. Riette from the plitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR ! subgrid rc-rr accretion -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP ! subgrid rr evaporation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR_RF!like PLBDAR but for the Rain Fraction part -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRF ! Rain fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR ! Autoconversion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR ! Accretion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV ! Evaporation of r_r -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZZW2, ZZW3, ZZW4 -REAL, DIMENSION(KSIZE) :: ZUSW ! Undersaturation over water -REAL, DIMENSION(KSIZE) :: ZTHLT ! Liquid potential temperature -REAL :: ZTIMAUTIC -REAL(KIND=JPRB) :: ZHOOK_HANDLE -REAL, DIMENSION(KSIZE) :: ZMASK, ZMASK1, ZMASK2 -INTEGER :: JL -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 0, ZHOOK_HANDLE) -! -! -!------------------------------------------------------------------------------- -! -!* 4.2 compute the autoconversion of r_c for r_r production: RCAUTR -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., -PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 0. - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCAUTR(JL)=PRCAUTR(JL)*ZMASK(JL) - ENDDO -ELSE - PRCAUTR(:) = 0. - WHERE(ZMASK(:)==1.) - PRCAUTR(:) = XTIMAUTC*MAX(PHLC_HRC(:)/PHLC_HCF(:) - XCRIAUTC/PRHODREF(:), 0.0) - PRCAUTR(:) = PHLC_HCF(:)*PRCAUTR(:) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RC(JL) = PA_RC(JL) - PRCAUTR(JL) - PA_RR(JL) = PA_RR(JL) + PRCAUTR(JL) -ENDDO -! -! -!* 4.3 compute the accretion of r_c for r_r production: RCACCR -! -IF (HSUBG_RC_RR_ACCR=='NONE') THEN - !CLoud water and rain are diluted over the grid box - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2) - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &PCOMPUTE(JL) - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCACCR(JL)=PRCACCR(JL) * ZMASK(JL) - ENDDO - ELSE - PRCACCR(:) = 0. - WHERE(ZMASK(:)==1.) - PRCACCR(:) = XFCACCR * PRCT(:) & - * PLBDAR(:)**XEXCACCR & - * PRHODREF(:)**(-XCEXVT) - END WHERE - ENDIF - -ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN - !Cloud water is concentrated over its fraction with possibly to parts with high and low content as set for autoconversion - !Rain is concnetrated over its fraction - !Rain in high content area fraction: PHLC_HCF - !Rain in low content area fraction: - ! if PRF<PCF (rain is entirely falling in cloud): PRF-PHLC_HCF - ! if PRF>PCF (rain is falling in cloud and in clear sky): PCF-PHLC_HCF - ! => min(PCF, PRF)-PHLC_HCF - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2) - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &PCOMPUTE(JL) - ZMASK1(JL)=ZMASK(JL) * & - &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., -PHLC_HCF(JL))) ! PHLC_HCF(:)>0. - ZMASK2(JL)=ZMASK(JL) * & - &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_LRC(JL))) * & ! PHLC_LRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., -PHLC_LCF(JL))) ! PHLC_LCF(:)>0. - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCACCR(JL)=PRCACCR(JL) * MIN(1., ZMASK1(JL)+ZMASK2(JL)) - ENDDO - ELSE - PRCACCR(:)=0. - WHERE(ZMASK1(:)==1.) - !Accretion due to rain falling in high cloud content - PRCACCR(:) = XFCACCR * ( PHLC_HRC(:)/PHLC_HCF(:) ) & - * PLBDAR_RF(:)**XEXCACCR & - * PRHODREF(:)**(-XCEXVT) & - * PHLC_HCF - END WHERE - WHERE(ZMASK2(:)==1.) - !We add acrretion due to rain falling in low cloud content - PRCACCR(:) = PRCACCR(:) + XFCACCR * ( PHLC_LRC(:)/PHLC_LCF(:) ) & - * PLBDAR_RF(:)**XEXCACCR & - * PRHODREF(:)**(-XCEXVT) & - * (MIN(PCF(:), PRF(:))-PHLC_HCF(:)) - END WHERE - ENDIF -ELSE - !wrong HSUBG_RC_RR_ACCR case - CALL ABORT - STOP 'wrong HSUBG_RC_RR_ACCR case' -ENDIF -DO JL=1, KSIZE - PA_RC(JL) = PA_RC(JL) - PRCACCR(JL) - PA_RR(JL) = PA_RR(JL) + PRCACCR(JL) -ENDDO -! -!* 4.4 compute the evaporation of r_r: RREVAV -! -IF (HSUBG_RR_EVAP=='NONE') THEN - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &MAX(0., SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)<=XRTMIN(2) - &PCOMPUTE(JL) - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRREVAV(JL)=PRREVAV(JL)*ZMASK(JL) - ENDDO - ELSE - PRREVAV(:) = 0. - !Evaporation only when there's no cloud (RC must be 0) - WHERE(ZMASK(:)==1.) - PRREVAV(:) = EXP( XALPW - XBETAW/PT(:) - XGAMW*ALOG(PT(:) ) ) ! es_w - ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( XEPSILO * PRREVAV(:) ) - ! Undersaturation over water - PRREVAV(:) = ( XLVTT+(XCPV-XCL)*(PT(:)-XTT) )**2 / ( PKA(:)*XRV*PT(:)**2 ) & - + ( XRV*PT(:) ) / ( PDV(:)*PRREVAV(:) ) - PRREVAV(:) = ( MAX( 0.0,ZUSW(:) )/(PRHODREF(:)*PRREVAV(:)) ) * & - ( X0EVAR*PLBDAR(:)**XEX0EVAR+X1EVAR*PCJ(:)*PLBDAR(:)**XEX1EVAR ) - END WHERE - ENDIF - -ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN - !Evaporation in clear sky part - !With CLFR, rain is diluted over the grid box - !With PRFR, rain is concentrated in its fraction - !Use temperature and humidity in clear sky part like Bechtold et al. (1993) - IF (HSUBG_RR_EVAP=='CLFR') THEN - ZZW4(:)=1. !Precipitation fraction - ZZW3(:)=PLBDAR(:) - ELSE - ZZW4(:)=PRF(:) !Precipitation fraction - ZZW3(:)=PLBDAR_RF(:) - ENDIF - - !ATTENTION - !Il faudrait recalculer les variables PKA, PDV, PCJ en tenant compte de la température T^u - !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s - !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice - !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &MAX(0., -SIGN(1., PCF(JL)-ZZW4(JL))) * & ! ZZW4(:) > PCF(:) - &PCOMPUTE(JL) - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRREVAV(JL)=PRREVAV(JL)*ZMASK(JL) - ENDDO - ELSE - PRREVAV(:) = 0. - WHERE(ZMASK(:)==1) - ! outside the cloud (environment) the use of T^u (unsaturated) instead of T - ! Bechtold et al. 1993 - ! - ! T_l - ZTHLT(:) = PTHT(:) - XLVTT*PTHT(:)/XCPD/PT(:)*PRCT(:) - ! - ! T^u = T_l = theta_l * (T/theta) - ZZW2(:) = ZTHLT(:) * PT(:) / PTHT(:) - ! - ! es_w with new T^u - PRREVAV(:) = EXP( XALPW - XBETAW/ZZW2(:) - XGAMW*ALOG(ZZW2(:) ) ) - ! - ! S, Undersaturation over water (with new theta^u) - ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( XEPSILO * PRREVAV(:) ) - ! - PRREVAV(:) = ( XLVTT+(XCPV-XCL)*(ZZW2(:)-XTT) )**2 / ( PKA(:)*XRV*ZZW2(:)**2 ) & - + ( XRV*ZZW2(:) ) / ( PDV(:)*PRREVAV(:) ) - ! - PRREVAV(:) = MAX( 0.0,ZUSW(:) )/(PRHODREF(:)*PRREVAV(:)) * & - ( X0EVAR*ZZW3(:)**XEX0EVAR+X1EVAR*PCJ(:)*ZZW3(:)**XEX1EVAR ) - ! - PRREVAV(:) = PRREVAV(:)*(ZZW4(:)-PCF(:)) - END WHERE - ENDIF - -ELSE - !wrong HSUBG_RR_EVAP case - CALL ABORT - STOP 'wrong HSUBG_RR_EVAP case' -END IF -DO JL=1, KSIZE - PA_RR(JL) = PA_RR(JL) - PRREVAV(JL) - PA_RV(JL) = PA_RV(JL) + PRREVAV(JL) - PA_TH(JL) = PA_TH(JL) - PRREVAV(JL)*PLVFACT(JL) -ENDDO -! -IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 1, ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_WARM diff --git a/src/arome/micro/modi_ice4_warm.F90 b/src/arome/micro/modi_ice4_warm.F90 deleted file mode 100644 index 4e6e5c4c7db149b654d2d4eac9ea2d59b5647c1d..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_ice4_warm.F90 +++ /dev/null @@ -1,45 +0,0 @@ -MODULE MODI_ICE4_WARM -INTERFACE -SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &PRHODREF, PLVFACT, PT, PPRES, PTHT, & - &PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & - &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - &PCF, PRF, & - &PRVT, PRCT, PRRT, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PA_TH, PA_RV, PA_RC, PA_RR) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR ! subgrid rc-rr accretion -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP ! subgrid rr evaporation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR_RF!like PLBDAR but for the Rain Fraction part -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRF ! Rain fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR ! Autoconversion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR ! Accretion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV ! Evaporation of r_r -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -END SUBROUTINE ICE4_WARM -END INTERFACE -END MODULE MODI_ICE4_WARM diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_warm.F90 b/src/common/micro/mode_ice4_warm.F90 similarity index 89% rename from src/arome/modset_Ryad/mpa/micro/internals/ice4_warm.F90 rename to src/common/micro/mode_ice4_warm.F90 index 05a6f687833cb25448e9ea65e5c027740dbe8c4a..39c43c573f6d224dff1e9d7db62df270c857ca51 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_warm.F90 +++ b/src/common/micro/mode_ice4_warm.F90 @@ -1,3 +1,11 @@ +!MNH_LIC Copyright 1994-2021 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 MODE_ICE4_WARM +IMPLICIT NONE +CONTAINS SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & &PRHODREF, PLVFACT, PT, PPRES, PTHT, & &PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & @@ -24,9 +32,11 @@ SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR +USE MODD_CST, ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT, XEPSILO +USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT, XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: X0EVAR, X1EVAR, XCRIAUTC, XEX0EVAR, XEX1EVAR, XEXCACCR, XFCACCR, XTIMAUTC +! +USE MODE_MSG USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! @@ -37,8 +47,8 @@ IMPLICIT NONE INTEGER, INTENT(IN) :: KSIZE LOGICAL, INTENT(IN) :: LDSOFT REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR ! subgrid rc-rr accretion -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP ! subgrid rr evaporation +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_RC_RR_ACCR ! subgrid rc-rr accretion +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_RR_EVAP ! subgrid rr evaporation REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature @@ -71,7 +81,6 @@ REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR REAL, DIMENSION(KSIZE) :: ZZW2, ZZW3, ZZW4 REAL, DIMENSION(KSIZE) :: ZUSW ! Undersaturation over water REAL, DIMENSION(KSIZE) :: ZTHLT ! Liquid potential temperature -REAL :: ZTIMAUTIC REAL(KIND=JPRB) :: ZHOOK_HANDLE REAL, DIMENSION(KSIZE) :: ZMASK, ZMASK1, ZMASK2 INTEGER :: JL @@ -86,7 +95,7 @@ IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 0, ZHOOK_HANDLE) ! DO JL=1, KSIZE ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., -PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 0. + &MAX(0., -SIGN(1., 1.E-20-PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 1.E-20 &PCOMPUTE(JL) ENDDO IF(LDSOFT) THEN @@ -138,10 +147,10 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN &PCOMPUTE(JL) ZMASK1(JL)=ZMASK(JL) * & &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., -PHLC_HCF(JL))) ! PHLC_HCF(:)>0. + &MAX(0., -SIGN(1., 1.E-20-PHLC_HCF(JL))) ! PHLC_HCF(:)>1.E-20 ZMASK2(JL)=ZMASK(JL) * & &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_LRC(JL))) * & ! PHLC_LRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., -PHLC_LCF(JL))) ! PHLC_LCF(:)>0. + &MAX(0., -SIGN(1., 1.E-20-PHLC_LCF(JL))) ! PHLC_LCF(:)>1.E-20 ENDDO IF(LDSOFT) THEN DO JL=1, KSIZE @@ -165,9 +174,7 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN END WHERE ENDIF ELSE - !wrong HSUBG_RC_RR_ACCR case - CALL ABORT - STOP 'wrong HSUBG_RC_RR_ACCR case' + CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','wrong HSUBG_RC_RR_ACCR case') ENDIF ! !* 4.4 compute the evaporation of r_r: RREVAV @@ -252,9 +259,7 @@ ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN ENDIF ELSE - !wrong HSUBG_RR_EVAP case - CALL ABORT - STOP 'wrong HSUBG_RR_EVAP case' + CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','wrong HSUBG_RR_EVAP case') END IF ! DO JL=1, KSIZE @@ -270,5 +275,6 @@ DO JL=1, KSIZE ENDDO ! IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 1, ZHOOK_HANDLE) - +! END SUBROUTINE ICE4_WARM +END MODULE MODE_ICE4_WARM diff --git a/src/mesonh/micro/ice4_warm.f90 b/src/mesonh/micro/ice4_warm.f90 deleted file mode 100644 index aa61b1dac3ee676c3ec2ecca6d2af30c1ec9b8a5..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/ice4_warm.f90 +++ /dev/null @@ -1,316 +0,0 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -MODULE MODI_ICE4_WARM -INTERFACE -SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - PRHODREF, PLVFACT, PT, PPRES, PTHT, & - PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & - PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - PCF, PRF, & - PRVT, PRCT, PRRT, & - PRCAUTR, PRCACCR, PRREVAV, & - PA_TH, PA_RV, PA_RC, PA_RR) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -CHARACTER(len=80), INTENT(IN) :: HSUBG_RC_RR_ACCR ! subgrid rc-rr accretion -CHARACTER(len=80), INTENT(IN) :: HSUBG_RR_EVAP ! subgrid rr evaporation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR_RF!like PLBDAR but for the Rain Fraction part -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRF ! Rain fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR ! Autoconversion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR ! Accretion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV ! Evaporation of r_r -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -END SUBROUTINE ICE4_WARM -END INTERFACE -END MODULE MODI_ICE4_WARM -SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - PRHODREF, PLVFACT, PT, PPRES, PTHT, & - PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, & - PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - PCF, PRF, & - PRVT, PRCT, PRRT, & - PRCAUTR, PRCACCR, PRREVAV, & - PA_TH, PA_RV, PA_RC, PA_RR) -!! -!!** PURPOSE -!! ------- -!! Computes the warm process -!! -!! AUTHOR -!! ------ -!! S. Riette from the plitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY: XALPW,XBETAW,XCL,XCPD,XCPV,XGAMW,XLVTT,XMD,XMV,XRV,XTT,XEPSILO -USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT,XRTMIN -USE MODD_RAIN_ICE_PARAM, ONLY: X0EVAR,X1EVAR,XCRIAUTC,XEX0EVAR,XEX1EVAR,XEXCACCR,XFCACCR,XTIMAUTC -! -USE MODE_MSG -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -CHARACTER(len=80), INTENT(IN) :: HSUBG_RC_RR_ACCR ! subgrid rc-rr accretion -CHARACTER(len=80), INTENT(IN) :: HSUBG_RR_EVAP ! subgrid rr evaporation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR_RF!like PLBDAR but for the Rain Fraction part -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRF ! Rain fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR ! Autoconversion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR ! Accretion of r_c for r_r production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV ! Evaporation of r_r -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZZW2, ZZW3, ZZW4 -REAL, DIMENSION(KSIZE) :: ZUSW ! Undersaturation over water -REAL, DIMENSION(KSIZE) :: ZTHLT ! Liquid potential temperature -REAL, DIMENSION(KSIZE) :: ZMASK, ZMASK1, ZMASK2 -INTEGER :: JL -!------------------------------------------------------------------------------- -! -! -! -!------------------------------------------------------------------------------- -! -!* 4.2 compute the autoconversion of r_c for r_r production: RCAUTR -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., 1.E-20-PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 0. - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCAUTR(JL)=PRCAUTR(JL)*ZMASK(JL) - ENDDO -ELSE - PRCAUTR(:) = 0. - WHERE(ZMASK(:)==1.) - PRCAUTR(:) = XTIMAUTC*MAX(PHLC_HRC(:)/PHLC_HCF(:) - XCRIAUTC/PRHODREF(:), 0.0) - PRCAUTR(:) = PHLC_HCF(:)*PRCAUTR(:) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RC(JL) = PA_RC(JL) - PRCAUTR(JL) - PA_RR(JL) = PA_RR(JL) + PRCAUTR(JL) -ENDDO -! -! -!* 4.3 compute the accretion of r_c for r_r production: RCACCR -! -IF (HSUBG_RC_RR_ACCR=='NONE') THEN - !CLoud water and rain are diluted over the grid box - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2) - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &PCOMPUTE(JL) - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCACCR(JL)=PRCACCR(JL) * ZMASK(JL) - ENDDO - ELSE - PRCACCR(:) = 0. - WHERE(ZMASK(:)==1.) - PRCACCR(:) = XFCACCR * PRCT(:) & - * PLBDAR(:)**XEXCACCR & - * PRHODREF(:)**(-XCEXVT) - END WHERE - ENDIF - -ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN - !Cloud water is concentrated over its fraction with possibly to parts with high and low content as set for autoconversion - !Rain is concnetrated over its fraction - !Rain in high content area fraction: PHLC_HCF - !Rain in low content area fraction: - ! if PRF<PCF (rain is entirely falling in cloud): PRF-PHLC_HCF - ! if PRF>PCF (rain is falling in cloud and in clear sky): PCF-PHLC_HCF - ! => min(PCF, PRF)-PHLC_HCF - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2) - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &PCOMPUTE(JL) - ZMASK1(JL)=ZMASK(JL) * & - &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., 1.E-20-PHLC_HCF(JL))) ! PHLC_HCF(:)>0. - ZMASK2(JL)=ZMASK(JL) * & - &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_LRC(JL))) * & ! PHLC_LRC(:)>XRTMIN(2) - &MAX(0., -SIGN(1., 1.E-20-PHLC_LCF(JL))) ! PHLC_LCF(:)>0. - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCACCR(JL)=PRCACCR(JL) * MIN(1., ZMASK1(JL)+ZMASK2(JL)) - ENDDO - ELSE - PRCACCR(:)=0. - WHERE(ZMASK1(:)==1.) - !Accretion due to rain falling in high cloud content - PRCACCR(:) = XFCACCR * ( PHLC_HRC(:)/PHLC_HCF(:) ) & - * PLBDAR_RF(:)**XEXCACCR & - * PRHODREF(:)**(-XCEXVT) & - * PHLC_HCF - END WHERE - WHERE(ZMASK2(:)==1.) - !We add acrretion due to rain falling in low cloud content - PRCACCR(:) = PRCACCR(:) + XFCACCR * ( PHLC_LRC(:)/PHLC_LCF(:) ) & - * PLBDAR_RF(:)**XEXCACCR & - * PRHODREF(:)**(-XCEXVT) & - * (MIN(PCF(:), PRF(:))-PHLC_HCF(:)) - END WHERE - ENDIF -ELSE - CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','wrong HSUBG_RC_RR_ACCR case') -ENDIF -DO JL=1, KSIZE - PA_RC(JL) = PA_RC(JL) - PRCACCR(JL) - PA_RR(JL) = PA_RR(JL) + PRCACCR(JL) -ENDDO -! -!* 4.4 compute the evaporation of r_r: RREVAV -! -IF (HSUBG_RR_EVAP=='NONE') THEN - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &MAX(0., SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)<=XRTMIN(2) - &PCOMPUTE(JL) - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRREVAV(JL)=PRREVAV(JL)*ZMASK(JL) - ENDDO - ELSE - PRREVAV(:) = 0. - !Evaporation only when there's no cloud (RC must be 0) - WHERE(ZMASK(:)==1.) - PRREVAV(:) = EXP( XALPW - XBETAW/PT(:) - XGAMW*ALOG(PT(:) ) ) ! es_w - ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( XEPSILO * PRREVAV(:) ) - ! Undersaturation over water - PRREVAV(:) = ( XLVTT+(XCPV-XCL)*(PT(:)-XTT) )**2 / ( PKA(:)*XRV*PT(:)**2 ) & - + ( XRV*PT(:) ) / ( PDV(:)*PRREVAV(:) ) - PRREVAV(:) = ( MAX( 0.0,ZUSW(:) )/(PRHODREF(:)*PRREVAV(:)) ) * & - ( X0EVAR*PLBDAR(:)**XEX0EVAR+X1EVAR*PCJ(:)*PLBDAR(:)**XEX1EVAR ) - END WHERE - ENDIF - -ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN - !Evaporation in clear sky part - !With CLFR, rain is diluted over the grid box - !With PRFR, rain is concentrated in its fraction - !Use temperature and humidity in clear sky part like Bechtold et al. (1993) - IF (HSUBG_RR_EVAP=='CLFR') THEN - ZZW4(:)=1. !Precipitation fraction - ZZW3(:)=PLBDAR(:) - ELSE - ZZW4(:)=PRF(:) !Precipitation fraction - ZZW3(:)=PLBDAR_RF(:) - ENDIF - - !ATTENTION - !Il faudrait recalculer les variables PKA, PDV, PCJ en tenant compte de la température T^u - !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s - !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice - !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &MAX(0., -SIGN(1., PCF(JL)-ZZW4(JL))) * & ! ZZW4(:) > PCF(:) - &PCOMPUTE(JL) - ENDDO - IF(LDSOFT) THEN - DO JL=1, KSIZE - PRREVAV(JL)=PRREVAV(JL)*ZMASK(JL) - ENDDO - ELSE - PRREVAV(:) = 0. - WHERE(ZMASK(:)==1) - ! outside the cloud (environment) the use of T^u (unsaturated) instead of T - ! Bechtold et al. 1993 - ! - ! T_l - ZTHLT(:) = PTHT(:) - XLVTT*PTHT(:)/XCPD/PT(:)*PRCT(:) - ! - ! T^u = T_l = theta_l * (T/theta) - ZZW2(:) = ZTHLT(:) * PT(:) / PTHT(:) - ! - ! es_w with new T^u - PRREVAV(:) = EXP( XALPW - XBETAW/ZZW2(:) - XGAMW*ALOG(ZZW2(:) ) ) - ! - ! S, Undersaturation over water (with new theta^u) - ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( XEPSILO * PRREVAV(:) ) - ! - PRREVAV(:) = ( XLVTT+(XCPV-XCL)*(ZZW2(:)-XTT) )**2 / ( PKA(:)*XRV*ZZW2(:)**2 ) & - + ( XRV*ZZW2(:) ) / ( PDV(:)*PRREVAV(:) ) - ! - PRREVAV(:) = MAX( 0.0,ZUSW(:) )/(PRHODREF(:)*PRREVAV(:)) * & - ( X0EVAR*ZZW3(:)**XEX0EVAR+X1EVAR*PCJ(:)*ZZW3(:)**XEX1EVAR ) - ! - PRREVAV(:) = PRREVAV(:)*(ZZW4(:)-PCF(:)) - END WHERE - ENDIF - -ELSE - CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_WARM','wrong HSUBG_RR_EVAP case') -END IF -DO JL=1, KSIZE - PA_RR(JL) = PA_RR(JL) - PRREVAV(JL) - PA_RV(JL) = PA_RV(JL) + PRREVAV(JL) - PA_TH(JL) = PA_TH(JL) - PRREVAV(JL)*PLVFACT(JL) -ENDDO -! -! -END SUBROUTINE ICE4_WARM