Skip to content
Snippets Groups Projects
phys_paramn.f90 55.1 KiB
Newer Older
  • Learn to ignore specific revisions
  •   !
    END IF
    !
      IF( LUSERC .AND. LUSERI ) THEN
        XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * XDRCCONV(:,:,:)
        XRRS(:,:,:,4) = XRRS(:,:,:,4) + XRHODJ(:,:,:) * XDRICONV(:,:,:)
    !
      ELSE IF ( LUSERC .AND. (.NOT. LUSERI) ) THEN
    !
    !  If only cloud water but no cloud ice is used, the convective tendency
    !     for cloud ice is added to the tendency for cloud water
    !
          XRRS(:,:,:,2) = XRRS(:,:,:,2) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + &
                                                           XDRICONV(:,:,:)   )
    !     and cloud ice is melted
    !
          XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) *                      &
             ( XP00/XPABST(:,:,:) )**(XRD/XCPD) * XLMTT / XCPD * XDRICONV(:,:,:)
    !
      ELSE IF ( (.NOT. LUSERC) .AND. (.NOT. LUSERI) ) THEN
    !
    !  If no cloud water and no cloud ice are used the convective tendencies for these
    !     variables are added to the water vapor tendency
    !
          XRRS(:,:,:,1) = XRRS(:,:,:,1) + XRHODJ(:,:,:) * (XDRCCONV(:,:,:) + &
                                                           XDRICONV(:,:,:)   )
    !     and all cloud condensate is evaporated
    !
          XRTHS(:,:,:) = XRTHS(:,:,:) - XRHODJ(:,:,:) / XCPD * (              &
                         XLVTT * XDRCCONV(:,:,:) + XLSTT * XDRICONV(:,:,:) ) *&
                        ( XP00 / XPABST(:,:,:) ) ** ( XRD / XCPD )
      END IF                                                               
    END IF
    !
    !  budget storage
    !
    IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN
      IF (LBUDGET_TH) CALL BUDGET (XRTHS,4,'DCONV_BU_RTH')
      IF (LBUDGET_RV) CALL BUDGET (XRRS(:,:,:,1),6,'DCONV_BU_RRV')
      IF (LBUDGET_RC) CALL BUDGET (XRRS(:,:,:,2),7,'DCONV_BU_RRC')
      IF (LBUDGET_RI) CALL BUDGET (XRRS(:,:,:,4),9,'DCONV_BU_RRI')
      IF (LCHTRANS .AND. LBUDGET_SV) THEN
        DO JSV = 1, SIZE(XRSVS,4)
          CALL BUDGET (XRSVS(:,:,:,JSV),JSV+12,'DCONV_BU_RSV')
        END DO
      END IF
    END IF
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    PKAFR = PKAFR + ZTIME2 - ZTIME1 &
           - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
    !
    PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
    !
    !-----------------------------------------------------------------------------
    !
    !*        3.    TURBULENT SURFACE FLUXES
    !               ------------------------
    !
    ZTIME1 = ZTIME2
    !
    IF (CSURF=='EXTE') THEN
      CALL GOTO_SURFEX(IMI,.TRUE.)
    !
      IF( LTRANS ) THEN
        XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) + XUTRANS
        XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) + XVTRANS
      END IF
      !
      ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH))
      ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH))
      ALLOCATE(ZEMIS  (IIU,IJU))
      ALLOCATE(ZTSRAD (IIU,IJU))
      !  
    
      DO JKID = IMI+1,NMODEL  ! min value of the possible kids
        IF (IMI == NDAD(JKID) .AND. XWAY(JKID) == 2. .AND. &
         CPROGRAM=='MESONH' .AND. &
         (CCONF == 'RESTA' .OR. (CCONF == 'START' .AND. KTCOUNT /= 1))) THEN
        !  where kids exist, use the two-way output fields (i.e. OMASKkids true)
        !  rather than the farther calculations in radiation and convection schemes
    
    ! BUG if number of the son does not follow the number of the dad
    !    IKIDM = JKID-IMI
          IKIDM = IKIDM + 1
    
          IF (LUSERC .AND. ((LSEDIC .AND. CCLOUD(1:3) == 'ICE') .OR.  &
              (LSEDC .AND. (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO')) )) THEN
            WHERE (OMASKkids(:,:) )
              XINPRC(:,:) = ZSAVE_INPRC(:,:,IKIDM)
            ENDWHERE
          END IF
          IF (LUSERR) THEN
            WHERE (OMASKkids(:,:) )
              XINPRR(:,:) = ZSAVE_INPRR(:,:,IKIDM)
            ENDWHERE
          END IF
          IF (LUSERS) THEN
            WHERE (OMASKkids(:,:) )
              XINPRS(:,:) = ZSAVE_INPRS(:,:,IKIDM)
           ENDWHERE
          END IF
          IF (LUSERG) THEN
            WHERE (OMASKkids(:,:) )
              XINPRG(:,:) = ZSAVE_INPRG(:,:,IKIDM)
            ENDWHERE
          END IF
          IF (LUSERH) THEN
            WHERE (OMASKkids(:,:) )
              XINPRH(:,:) = ZSAVE_INPRH(:,:,IKIDM)
            ENDWHERE
          END IF
          IF (CDCONV /= 'NONE') THEN
            WHERE (OMASKkids(:,:) )
              XPRCONV(:,:) = ZSAVE_PRCONV(:,:,IKIDM)
              XPRSCONV(:,:) = ZSAVE_PRSCONV(:,:,IKIDM)
            ENDWHERE
          END IF
          IF (CRAD /= 'NONE') THEN
            DO JSWB=1,NSWB_MNH
              WHERE (OMASKkids(:,:) ) 
                XDIRFLASWD(:,:,JSWB) = ZSAVE_DIRFLASWD(:,:,JSWB,IKIDM)
                XSCAFLASWD(:,:,JSWB) = ZSAVE_SCAFLASWD(:,:,JSWB,IKIDM)
                XDIRSRFSWD(:,:,JSWB) = ZSAVE_DIRSRFSWD(:,:,JSWB,IKIDM)
              ENDWHERE
            ENDDO
          END IF
        ENDIF
      END DO
      !
     IF (IMODSON /= 0 ) THEN
        DEALLOCATE( ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH)
        DEALLOCATE( ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV)
        DEALLOCATE( ZSAVE_DIRFLASWD,ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD)
     END IF
      CALL GROUND_PARAM_n(ZSFTH, ZSFRV, ZSFSV, ZSFCO2, ZSFU, ZSFV, &
                          ZDIR_ALB, ZSCA_ALB, ZEMIS, ZTSRAD        )
      !
      IF (SIZE(XEMIS)>0) THEN
        XDIR_ALB = ZDIR_ALB
        XSCA_ALB = ZSCA_ALB
        XEMIS    = ZEMIS
        XTSRAD   = ZTSRAD
      END IF
      !
      DEALLOCATE(ZDIR_ALB)
      DEALLOCATE(ZSCA_ALB)
      DEALLOCATE(ZEMIS   )
      DEALLOCATE(ZTSRAD  )
      !
      !
      IF( LTRANS ) THEN
        XUT(:,:,1+JPVEXT) = XUT(:,:,1+JPVEXT) - XUTRANS
        XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) - XVTRANS
      END IF
    !
    ELSE
      ZSFTH    = 0.
      ZSFRV    = 0.
      ZSFSV    = 0.
      ZSFCO2   = 0.
      ZSFU     = 0.
      ZSFV     = 0.
    END IF
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    PGROUND = PGROUND + ZTIME2 - ZTIME1
    !
    !-----------------------------------------------------------------------------
    !
    !*        3.1    EDDY FLUXES PARAMETRIZATION
    !               ------------------
    !
    IF (IMI==1) THEN  ! On calcule les flus turb. comme preconise par PP
    
       ! Heat eddy fluxes
    
       IF ( LTH_FLX ) CALL EDDY_FLUX_n(IMI,KTCOUNT,XVT,XTHT,XRHODJ,XRTHS,XVTH_FLUX_M,XWTH_FLUX_M)
    
       !
       ! Momentum eddy fluxes
    
       IF ( LUV_FLX ) CALL EDDYUV_FLUX_n(IMI,CLUOUT,KTCOUNT,XVT,XTHT,XRHODJ,XRHODREF,XPABSM,XRVS,XVU_FLUX_M)
    
    
    ELSE
       ! TEST pour maille infèrieure à 20km ? 
       !      car pb d'instabilités ?
       !      Pour le modèle fils, on spawne les flux du modèle père
       ! Heat eddy fluxes
       IF ( LTH_FLX ) CALL EDDY_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY)
       !
       ! Momentum eddy fluxes
       IF ( LUV_FLX ) CALL EDDYUV_FLUX_ONE_WAY_n (IMI,KTCOUNT,NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),CLBCX,CLBCY)
       !
    END IF
    !-----------------------------------------------------------------------------
    !
    !*        4.    PASSIVE POLLUTANTS
    !               ------------------
    !
    ZTIME1 = ZTIME2
    !
    
    IF (LPASPOL) CALL PASPOL(XTSTEP, ZSFSV, ILUOUT, NVERB, OCLOSE_OUT, HFMFILE, CLUOUT )
    
    !
    !
    !*        4b.  PASSIVE POLLUTANTS FOR MASS-FLUX SCHEME DIAGNOSTICS
    !              ---------------------------------------------------
    !
    IF (LCONDSAMP) CALL CONDSAMP(ZSFSV, ILUOUT, NVERB, OCLOSE_OUT, HFMFILE, CLUOUT)
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    PTRACER = PTRACER + ZTIME2 - ZTIME1
    !-----------------------------------------------------------------------------
    !
    !*        5.    Drag force 
    !               ----------
    !
    ZTIME1 = ZTIME2
    XTIME_BU_PROCESS = 0.
    XTIME_LES_BU_PROCESS = 0.
    !
    IF (LDRAGTREE) CALL DRAG_VEG(XUT,XVT,XTKET,XRHODJ,XZZ,XRUS, XRVS, XRTKES)
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    PDRAG = PDRAG + ZTIME2 - ZTIME1 &
                 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
    !
    PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
    !
    !-----------------------------------------------------------------------------
    !
    !*        6.    TURBULENCE SCHEME
    !               -----------------
    !
    ZTIME1 = ZTIME2
    XTIME_BU_PROCESS = 0.
    XTIME_LES_BU_PROCESS = 0.
    !
    ZSFTH(:,:)  = ZSFTH(:,:) * XDIRCOSZW(:,:)
    ZSFRV(:,:)  = ZSFRV(:,:) * XDIRCOSZW(:,:)
    DO JSV=1,NSV
      ZSFSV(:,:,JSV)  = ZSFSV(:,:,JSV) * XDIRCOSZW(:,:)
    END DO
    !
    IF (LLES_CALL) CALL SWITCH_SBG_LES_n
    !
    !
    IF ( CTURB == 'TKEL' ) THEN
    !
    
    !*        6.1 complete surface fluxe fields on the border
    !
    
        CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFTH)
        CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFRV)
        CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFU)
        CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFV)
        IF(NSV >0)THEN
          DO JSV=1,NSV
            CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFSV(:,:,JSV))
          END DO
        END IF
        CALL ADD2DFIELD_ll(TZFIELDS_ll,ZSFCO2)
        CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
        CALL CLEANLIST_ll(TZFIELDS_ll)
    
      !20130918 use MPPDB for simultaneous runs np4 and np1
      CALL MPPDB_CHECK2D(ZSFU,"phys_param::ZSFU",PRECISION)
      !
    
      IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
        ZSFTH(IIB-1,:)=ZSFTH(IIB,:)
        ZSFRV(IIB-1,:)=ZSFRV(IIB,:)
        ZSFU(IIB-1,:)=ZSFU(IIB,:)
        ZSFV(IIB-1,:)=ZSFV(IIB,:)
        IF (NSV>0)           ZSFSV(IIB-1,:,:)=ZSFSV(IIB,:,:)
        ZSFCO2(IIB-1,:)=ZSFCO2(IIB,:)
      END IF
      IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
        ZSFTH(IIE+1,:)=ZSFTH(IIE,:)
        ZSFRV(IIE+1,:)=ZSFRV(IIE,:)
        ZSFU(IIE+1,:)=ZSFU(IIE,:)
        ZSFV(IIE+1,:)=ZSFV(IIE,:)
        IF (NSV>0)           ZSFSV(IIE+1,:,:)=ZSFSV(IIE,:,:)
        ZSFCO2(IIE+1,:)=ZSFCO2(IIE,:)
      END IF
      IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
        ZSFTH(:,IJB-1)=ZSFTH(:,IJB)
        ZSFRV(:,IJB-1)=ZSFRV(:,IJB)
        ZSFU(:,IJB-1)=ZSFU(:,IJB)
        ZSFV(:,IJB-1)=ZSFV(:,IJB)
        IF (NSV>0)           ZSFSV(:,IJB-1,:)=ZSFSV(:,IJB,:)
        ZSFCO2(:,IJB-1)=ZSFCO2(:,IJB)
      END IF
      IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
        ZSFTH(:,IJE+1)=ZSFTH(:,IJE)
        ZSFRV(:,IJE+1)=ZSFRV(:,IJE)
        ZSFU(:,IJE+1)=ZSFU(:,IJE)
        ZSFV(:,IJE+1)=ZSFV(:,IJE)
        IF (NSV>0)           ZSFSV(:,IJE+1,:)=ZSFSV(:,IJE,:)
        ZSFCO2(:,IJE+1)=ZSFCO2(:,IJE)
      END IF
    !
      IF( LTRANS ) THEN
        XUT(:,:,:) = XUT(:,:,:) + XUTRANS
        XVT(:,:,:) = XVT(:,:,:) + XVTRANS
      END IF
    !
    !
    IF(ALLOCATED(XTHW_FLUX))  THEN
     DEALLOCATE(XTHW_FLUX)
    
     ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
    
     ALLOCATE(XTHW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
    
    END IF
    
    IF(ALLOCATED(XRCW_FLUX))  THEN
     DEALLOCATE(XRCW_FLUX)
    
     ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
    
     ALLOCATE(XRCW_FLUX(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
    
    END IF
    !
    IF(ALLOCATED(XSVW_FLUX))  THEN
     DEALLOCATE(XSVW_FLUX)
    
     ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)))
    
     ALLOCATE(XSVW_FLUX(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)))
    
       CALL TURB(1,IKU,1,IMI,NRR, NRRL, NRRI, CLBCX, CLBCY, 1,NMODEL_CLOUD,     &
    
          OCLOSE_OUT,LTURB_FLX,LTURB_DIAG,LSUBG_COND,LRMC01,                    &
    
          CTURBDIM,CTURBLEN,CTOM,CTURBLEN_CLOUD,XIMPL,                          &
          XTSTEP,HFMFILE,CLUOUT,                                                &
    
          XDXX,XDYY,XDZZ,XDZX,XDZY,XZZ,                                         &
          XDIRCOSXW,XDIRCOSYW,XDIRCOSZW,XCOSSLOPE,XSINSLOPE,                    &
          XRHODJ,XTHVREF,XRHODREF,                                              &
          ZSFTH,ZSFRV,ZSFSV,ZSFU,ZSFV,                                          &
    
          XPABST,XUT,XVT,XWT,XTKET,XSVT,XSRCT,XBL_DEPTH,XSBL_DEPTH,             &
          XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT,                                &
    
          XRUS,XRVS,XRWS,XRTHS,XRRS,XRSVS,XRTKES,XRTKEMS, XSIGS, XWTHVMF,       &
    
          XTHW_FLUX, XRCW_FLUX, XSVW_FLUX                                       )
    !
    IF (LRMC01) THEN
      CALL ADD2DFIELD_ll(TZFIELDS_ll,XSBL_DEPTH)
      CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
      CALL CLEANLIST_ll(TZFIELDS_ll)
      IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
        XSBL_DEPTH(IIB-1,:)=XSBL_DEPTH(IIB,:)
      END IF
      IF ( CLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN
        XSBL_DEPTH(IIE+1,:)=XSBL_DEPTH(IIE,:)
      END IF
      IF ( CLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN
        XSBL_DEPTH(:,IJB-1)=XSBL_DEPTH(:,IJB)
      END IF
      IF ( CLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN
        XSBL_DEPTH(:,IJE+1)=XSBL_DEPTH(:,IJE)
      END IF
    END IF
    !
    CALL SECOND_MNH2(ZTIME3)
    !
    !-----------------------------------------------------------------------------
    !
    !*        7.    EDMF SCHEME
    !               -----------
    !
    IF (CSCONV == 'EDKF') THEN
         ALLOCATE(ZEXN (IIU,IJU,IKU))
         ALLOCATE(ZSIGMF (IIU,IJU,IKU))
         ZSIGMF(:,:,:)=0.    
    
         ZEXN(:,:,:)=(XPABST(:,:,:)/XP00)**(XRD/XCPD)  
    
         !$20131113 check3d on ZEXN
         CALL MPPDB_CHECK3D(ZEXN,"physparan.7::ZEXN",PRECISION)
         CALL ADD3DFIELD_ll(TZFIELDS_ll, ZEXN)
         !$20131113 add update_halo_ll
            CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
               CALL CLEANLIST_ll(TZFIELDS_ll)
         CALL MPPDB_CHECK3D(ZEXN,"physparam.7::ZEXN",PRECISION)
     !    
    
         CALL SHALLOW_MF_PACK(NRR,NRRL,NRRI, CMF_UPDRAFT, CMF_CLOUD, LMIXUV,  &
                       OCLOSE_OUT,LMF_FLX,HFMFILE,CLUOUT,ZTIME_LES_MF,        &
    
                       XIMPL_MF, XTSTEP,                                      &
    
                       XDZZ, XZZ,                                             &
    
                       XRHODJ, XRHODREF, XPABST, ZEXN, ZSFTH, ZSFRV,          &
                       XTHT,XRT,XUT,XVT,XTKET,XSVT,                           &
    
                       XRTHS,XRRS,XRUS,XRVS,XRSVS,                            &
                       ZSIGMF,XRC_MF, XRI_MF, XCF_MF, XWTHVMF)
    !
    ELSE
        XWTHVMF(:,:,:)=0.
        XRC_MF(:,:,:)=0.
        XRI_MF(:,:,:)=0.
        XCF_MF(:,:,:)=0.
    ENDIF   
    !
    CALL SECOND_MNH2(ZTIME4)
    
      IF( LTRANS ) THEN
        XUT(:,:,:) = XUT(:,:,:) - XUTRANS
        XVT(:,:,:) = XVT(:,:,:) - XVTRANS
      END IF
    
      IF (CMF_CLOUD == 'STAT') THEN
        XSIGS =SQRT( XSIGS**2 + ZSIGMF**2 )
      ENDIF
      IF (CSCONV == 'EDKF') THEN
        DEALLOCATE(ZSIGMF)
        DEALLOCATE(ZEXN)
      ENDIF
    END IF
    !
    IF (LLES_CALL) CALL SWITCH_SBG_LES_n
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    PTURB = PTURB + ZTIME2 - ZTIME1 - (XTIME_LES-ZTIME_LES_MF) - XTIME_LES_BU_PROCESS &
          - XTIME_BU_PROCESS - (ZTIME4 - ZTIME3)
    !
    PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF
    !
    PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
    !
    !-------------------------------------------------------------------------------
    !
    !*        8.    CHEMISTRY-AEROSOLS
    !               ------------------
    !
    ZTIME1 = ZTIME2
    XTIME_BU_PROCESS = 0.
    XTIME_LES_BU_PROCESS = 0.
    !
    IF (LUSECHEM) THEN
    
      CALL CH_MONITOR_n(ZWETDEPAER,KTCOUNT,XTSTEP, ILUOUT, NVERB)
    
    END IF
    !
    ! For inert aerosol (dust and sea salt) => aer_monitor_n
    IF ((LDUST).OR.(LSALT)) THEN
    !
    ! tests to see if any cloud exists
    !   
        GCLD=.TRUE.
        IF (GCLD .AND. NRR.LE.3 ) THEN 
          IF( MAXVAL(XCLDFR(:,:,:)).LE. 1.E-10 .AND. GCLOUD_ONLY ) THEN
              GCLD = .FALSE.                ! only the cloudy verticals would be 
                                            ! refreshed but there is no clouds 
          END IF
        END IF
    !
        IF (GCLD .AND. NRR.GE.4 ) THEN 
          IF( CCLOUD(1:3)=='ICE' )THEN
            IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN(2) .AND.             &
                MAXVAL(XRT(:,:,:,4)).LE.XRTMIN(4) .AND. GCLOUD_ONLY ) THEN
                GCLD = .FALSE.            ! only the cloudy verticals would be 
                                          ! refreshed but there is no cloudwater and ice
            END IF
          END IF
          IF( CCLOUD=='C3R5' )THEN
            IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_C1R3(2) .AND.             &
                MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_C1R3(4) .AND. GCLOUD_ONLY ) THEN
                GCLD = .FALSE.            ! only the cloudy verticals would be 
                                          ! refreshed but there is no cloudwater and ice
            END IF
          END IF
        END IF
    
    !
    
            CALL AER_MONITOR_n(KTCOUNT,XTSTEP, ILUOUT, NVERB, GCLD)
    
    END IF
    !
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    PCHEM = PCHEM + ZTIME2 - ZTIME1 &
          - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
    !
    PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
    !
    !
    !-------------------------------------------------------------------------------
    !
    !* deallocation of variables used in more than one parameterization
    !
    DEALLOCATE(ZSFU  )         ! surface schemes + turbulence
    DEALLOCATE(ZSFV  )
    DEALLOCATE(ZSFTH )
    DEALLOCATE(ZSFRV )
    DEALLOCATE(ZSFSV )
    DEALLOCATE(ZSFCO2)
    !
    !-------------------------------------------------------------------------------
    !
    END SUBROUTINE PHYS_PARAM_n