diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index bef5953058dc20e597ea1b5c0cdae28eb81816e8..09721c7ce98d77897bff54f041ca9f3dd0f64471 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -127,6 +127,7 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL !! Dec,12, 2008 (M. Leriche) move ZTDIST out from if.not.(tpflyer%fly) !! Dec,15, 2008 (V. Masson) correct do while aircraft move !! March, 2013 (O.Caumont) add radar reflectivities +!! April, 2014 (C.Lac) allow RARE calculation only if CCLOUD=ICE3 !! !! -------------------------------------------------------------------------- ! @@ -292,6 +293,7 @@ INTEGER :: IRESP ! return code REAL, DIMENSION(SIZE(PR,3)) :: ZTEMPZ! vertical profile of temperature REAL, DIMENSION(SIZE(PR,3)) :: ZRHODREFZ ! vertical profile of dry air density of the reference state REAL, DIMENSION(SIZE(PR,3)) :: ZCIT ! pristine ice concentration +REAL, DIMENSION(SIZE(PR,1),SIZE(PR,2),SIZE(PR,3)) :: ZR REAL, DIMENSION(SIZE(PR,3),SIZE(PR,4)+1) :: ZRZ ! vertical profile of hydrometeor mixing ratios REAL :: ZA,ZB,ZCC,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZRHOHYD ! generic microphysical parameters INTEGER :: JJ ! loop counter for quadrature @@ -317,6 +319,7 @@ IF(.NOT. ALLOCATED(XSVW_FLUX)) & ALLOCATE(XSVW_FLUX(SIZE(PSV,1),SIZE(PSV,2),SIZE(PSV,3),SIZE(PSV,4))) CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) ! +ZR = 0. ! !* 1.0 initialization of processor test ! -------------------------------- @@ -962,12 +965,18 @@ IF ( TPFLYER%FLY) THEN ! DO JLOOP=1,SIZE(PR,4) TPFLYER%R (IN,JLOOP) = FLYER_INTERP(PR(:,:,:,JLOOP)) + IF (JLOOP>=2) ZR(:,:,:) = ZR(:,:,:) + PR(:,:,:,JLOOP) END DO DO JLOOP=1,SIZE(PSV,4) TPFLYER%SV (IN,JLOOP) = FLYER_INTERP(PSV(:,:,:,JLOOP)) END DO - TPFLYER%RTZ (IN,:) = FLYER_INTERPZ(PR(:,:,:,2)+PR(:,:,:,3)+PR(:,:,:,4)+PR(:,:,:,5)+PR(:,:,:,6)) + TPFLYER%RTZ (IN,:) = FLYER_INTERPZ(ZR(:,:,:)) TPFLYER%FFZ (IN,:) = FLYER_INTERPZ(SQRT(PU**2+PV**2)) + ! initialization CRARE and CRARE_ATT + TPFLYER%CRARE(IN,:) = 0. + TPFLYER%CRARE_ATT(IN,:) = 0. + + IF (SIZE(PR,4) == 6 ) THEN ! only for ICE3 ZTEMPZ(:)=FLYER_INTERPZ(PTH(II:II+1,IJ:IJ+1,:) * ZEXN(:,:,:)) ZRHODREFZ(:)=FLYER_INTERPZ(PRHODREF(:,:,:)) ZCIT(:)=FLYER_INTERPZ(PCIT(:,:,:)) @@ -979,9 +988,7 @@ IF ( TPFLYER%FLY) THEN ZRZ(JK,7)=FLYER_INTERP_2D(PR(:,:,JK,2)*(1.-PSEA(:,:))) ! becomes cloud mixing ratio over land END DO ALLOCATE(ZAELOC(IKU)) - ! initialization CRARE and CRARE_ATT - TPFLYER%CRARE(IN,:) = 0. - TPFLYER%CRARE_ATT(IN,:) = 0. + ! ZAELOC(:)=0. ! initialization of quadrature points and weights ALLOCATE(ZX(JPTS_GAULAG),ZW(JPTS_GAULAG)) @@ -1146,7 +1153,7 @@ IF ( TPFLYER%FLY) THEN TPFLYER%CRARE_ATT(IN,:)=XUNDEF END WHERE DEALLOCATE(ZX,ZW,ZRTMIN) - + END IF ! end LOOP ICE3 ! vertical wind TPFLYER%WZ (IN,:) = FLYER_INTERPZ(ZWM(:,:,:)) IF (SIZE(PTKE)>0) TPFLYER%TKE (IN) = FLYER_INTERP(PTKE) diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90 index 2332e98ec7797153d95d590e7b6080a797c26fd3..f0fb8d93445843978f02d5adfee400e6337372ed 100644 --- a/src/MNH/endstep.f90 +++ b/src/MNH/endstep.f90 @@ -188,7 +188,8 @@ END MODULE MODI_ENDSTEP !! 10/2006 (Maric, Lac) modification for PPM schemes !! 10/2009 (C.Lac) Correction on FIT temporal scheme for variables !! advected with PPM -!! 04/2013 (C.Lac) FIT for all the variables +!! 04/2013 (C.Lac) FIT for all the variables +!! 04/2014 (C.Lac) Check on the positivity of XSVT !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -206,9 +207,12 @@ USE MODD_NSV, ONLY : XSVMIN, NSV_CHEMBEG, NSV_CHEMEND, & USE MODD_CH_AEROSOL, ONLY : LORILAM USE MODD_DUST, ONLY : LDUST USE MODD_PARAM_C2R2, ONLY : LACTIT +USE MODD_LBC_n, ONLY : CLBCX, CLBCY USE MODI_BUDGET USE MODI_SHUMAN ! +USE MODE_ll +! IMPLICIT NONE ! !* 0.1 DECLARATIONS OF ARGUMENTS @@ -262,10 +266,17 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PLBYRM,PLBYSVM ! ! INTEGER:: JSV ! loop counters INTEGER :: IKU +INTEGER :: IIB, IIE ! index of first and last inner mass points along x +INTEGER :: IJB, IJE ! index of first and last inner mass points along y ! !------------------------------------------------------------------------------ ! +IIB = 1 + JPHEXT +IIE = SIZE(PUT,1) - JPHEXT +IJB = 1 + JPHEXT +IJE = SIZE(PUT,2) - JPHEXT IKU=SIZE(XZHAT) +! !* 1. ASSELIN FILTER ! IF (HUVW_ADV_SCHEME(1:3)=='CEN') THEN @@ -304,6 +315,33 @@ IF (SIZE(PTKET,1) /= 0) PTKET(:,:,:)=PTKES(:,:,:) ! PSVT(:,:,:,1:KSV)=PSVS(:,:,:,1:KSV) ! +IF (LWEST_ll( ) .AND. CLBCX(1)=='OPEN') THEN + DO JSV=1,KSV + PSVT(IIB,:,:,JSV)=MAX(PSVT(IIB,:,:,JSV),XSVMIN(JSV)) + PSVT(IIB-1,:,:,JSV)=MAX(PSVT(IIB-1,:,:,JSV),XSVMIN(JSV)) + END DO +END IF +! +IF (LEAST_ll( ) .AND. CLBCX(2)=='OPEN') THEN + DO JSV=1,KSV + PSVT(IIE,:,:,JSV)=MAX(PSVT(IIE,:,:,JSV),XSVMIN(JSV)) + PSVT(IIE+1,:,:,JSV)=MAX(PSVT(IIE+1,:,:,JSV),XSVMIN(JSV)) + END DO +END IF +! +IF (LSOUTH_ll( ) .AND. CLBCY(1)=='OPEN') THEN + DO JSV=1,KSV + PSVT(:,IJB,:,JSV)=MAX(PSVT(:,IJB,:,JSV),XSVMIN(JSV)) + PSVT(:,IJB-1,:,JSV)=MAX(PSVT(:,IJB-1,:,JSV),XSVMIN(JSV)) + END DO +END IF +! +IF (LNORTH_ll( ) .AND. CLBCY(2)=='OPEN') THEN + DO JSV=1,KSV + PSVT(:,IJE,:,JSV)=MAX(PSVT(:,IJE,:,JSV),XSVMIN(JSV)) + PSVT(:,IJE+1,:,JSV)=MAX(PSVT(:,IJE+1,:,JSV),XSVMIN(JSV)) + END DO +END IF !------------------------------------------------------------------------------ ! !* 4. TEMPORAL ADVANCE OF THE LARGE SCALE FIELDS diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index 7f7e1008c2c3f1f0e197fad8d1b2a40f7dfa3c35..9f275853ff924379970480951e05f2026d6eacf1 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -92,6 +92,7 @@ END MODULE MODI_PROFILER_n !! ------------- !! Original 15/02/2002 !! March 2013 : C.Lac : Corrections for 1D + new fields (RARE,THV,DD,FF) +!! April 2014 : C.Lac : Call RADAR only if ICE3 !! !! -------------------------------------------------------------------------- ! @@ -184,10 +185,8 @@ INTEGER :: ILUOUT ! logical unit INTEGER :: IRESP ! return code INTEGER :: I ! loop for stations ! -! ++ CL REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTEMP,ZRARE,ZWORK32,ZTHV REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZWORK33,ZWORK34 -! -- CL !---------------------------------------------------------------------------- ! !* 2. PRELIMINARIES @@ -358,7 +357,7 @@ END IF ! -------------- ! ZTEMP(:,:,:)=PTH(:,:,:)*(PP(:,:,:)/ XP00) **(XRD/XCPD) -CALL RADAR_RAIN_ICE (PR, PCIT, PRHODREF, ZTEMP, ZRARE, ZWORK32, & +IF (SIZE(PR,4) == 6) CALL RADAR_RAIN_ICE (PR, PCIT, PRHODREF, ZTEMP, ZRARE, ZWORK32, & ZWORK33, ZWORK34 ) ! Theta_v ZTHV(:,:,:) = PTH(:,:,:) / (1.+WATER_SUM(PR(:,:,:,:)))*(1.+XRV/XRD*PR(:,:,:,1))