Ignore:
Timestamp:
Mar 9, 2018, 4:43:48 PM (7 years ago)
Author:
mvals
Message:
 
Location:
trunk/LMDZ.MARS/libf/phymars
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/improvedclouds.F

    r1779 r1909  
    1       subroutine improvedclouds(ngrid,nlay,ptimestep,
    2      &             pplay,pt,pdt,
    3      &             pq,pdq,pdqcloud,pdtcloud,
     1      subroutine improvedclouds(ngrid,nlay,microtimestep,
     2     &             pplay,pteff,sum_subpdt,
     3     &             pqeff,sum_subpdq,subpdqcloud,subpdtcloud,
    44     &             nq,tauscaling)
    55! to use  'getin'
     
    4242      INTEGER ngrid,nlay
    4343      integer nq                 ! nombre de traceurs
    44       REAL ptimestep             ! pas de temps physique (s)
     44      REAL microtimestep             ! pas de temps physique (s)
    4545      REAL pplay(ngrid,nlay)     ! pression au milieu des couches (Pa)
    4646           
    47       REAL pt(ngrid,nlay)        ! temperature at the middle of the
     47      REAL pteff(ngrid,nlay)        ! temperature at the middle of the
    4848                                 !   layers (K)
    49       REAL pdt(ngrid,nlay)       ! tendance temperature des autres
     49      REAL sum_subpdt(ngrid,nlay)       ! tendance temperature des autres
    5050                                 !   param.
    51       REAL pq(ngrid,nlay,nq)     ! traceur (kg/kg)
    52       REAL pdq(ngrid,nlay,nq)    ! tendance avant condensation
     51      REAL pqeff(ngrid,nlay,nq)     ! traceur (kg/kg)
     52      REAL sum_subpdq(ngrid,nlay,nq)    ! tendance avant condensation
    5353                                 !   (kg/kg.s-1)
    5454      REAL tauscaling(ngrid)     ! Convertion factor for qdust and Ndust
    5555
    5656c     Outputs:
    57       REAL pdqcloud(ngrid,nlay,nq) ! tendance de la condensation
     57      REAL subpdqcloud(ngrid,nlay,nq) ! tendance de la condensation
    5858                                   !   H2O(kg/kg.s-1)
    59       REAL pdtcloud(ngrid,nlay)    ! tendance temperature due
     59      REAL subpdtcloud(ngrid,nlay)    ! tendance temperature due
    6060                                   !   a la chaleur latente
    6161
     
    216216! 1. Initialisation
    217217!=============================================================
    218       cste = 4*pi*rho_ice*ptimestep
     218      cste = 4*pi*rho_ice*microtimestep
    219219
    220220      res_out(:,:) = 0
     
    222222
    223223c     Initialize the tendencies
    224       pdqcloud(1:ngrid,1:nlay,1:nq)=0
    225       pdtcloud(1:ngrid,1:nlay)=0
     224      subpdqcloud(1:ngrid,1:nlay,1:nq)=0
     225      subpdtcloud(1:ngrid,1:nlay)=0
    226226   
    227227     
    228228      zt(1:ngrid,1:nlay) =
    229      &      pt(1:ngrid,1:nlay) +
    230      &      pdt(1:ngrid,1:nlay) * ptimestep
     229     &      pteff(1:ngrid,1:nlay) +
     230     &      sum_subpdt(1:ngrid,1:nlay) * microtimestep
    231231
    232232      zq(1:ngrid,1:nlay,1:nq) =
    233      &      pq(1:ngrid,1:nlay,1:nq) +
    234      &      pdq(1:ngrid,1:nlay,1:nq) * ptimestep
     233     &      pqeff(1:ngrid,1:nlay,1:nq) +
     234     &      sum_subpdq(1:ngrid,1:nlay,1:nq) * microtimestep
    235235     
    236236     
     
    317317        dM = 0.
    318318        do i = 1, nbin_cld
    319           n_aer(i) = n_aer(i)/( 1. + rate(i)*ptimestep)
    320           m_aer(i) = m_aer(i)/( 1. + rate(i)*ptimestep)
    321           dN       = dN + n_aer(i) * rate(i) * ptimestep
    322           dM       = dM + m_aer(i) * rate(i) * ptimestep
     319          n_aer(i) = n_aer(i)/( 1. + rate(i)*microtimestep)
     320          m_aer(i) = m_aer(i)/( 1. + rate(i)*microtimestep)
     321          dN       = dN + n_aer(i) * rate(i) * microtimestep
     322          dM       = dM + m_aer(i) * rate(i) * microtimestep
    323323        enddo
    324324
     
    386386       lw=(2834.3-0.28*(zt(ig,l)-To)-
    387387     &     0.004*(zt(ig,l)-To)*(zt(ig,l)-To))*1.e+3
    388        pdtcloud(ig,l)= dMice*lw/cpp/ptimestep
     388       subpdtcloud(ig,l)= dMice*lw/cpp/microtimestep
    389389         
    390390         
     
    420420     
    421421      ! Get cloud tendencies
    422         pdqcloud(1:ngrid,1:nlay,igcm_h2o_vap) =
     422        subpdqcloud(1:ngrid,1:nlay,igcm_h2o_vap) =
    423423     &   (zq(1:ngrid,1:nlay,igcm_h2o_vap) -
    424      &    zq0(1:ngrid,1:nlay,igcm_h2o_vap))/ptimestep
    425         pdqcloud(1:ngrid,1:nlay,igcm_h2o_ice) =
     424     &    zq0(1:ngrid,1:nlay,igcm_h2o_vap))/microtimestep
     425        subpdqcloud(1:ngrid,1:nlay,igcm_h2o_ice) =
    426426     &   (zq(1:ngrid,1:nlay,igcm_h2o_ice) -
    427      &    zq0(1:ngrid,1:nlay,igcm_h2o_ice))/ptimestep
    428         pdqcloud(1:ngrid,1:nlay,igcm_ccn_mass) =
     427     &    zq0(1:ngrid,1:nlay,igcm_h2o_ice))/microtimestep
     428        subpdqcloud(1:ngrid,1:nlay,igcm_ccn_mass) =
    429429     &   (zq(1:ngrid,1:nlay,igcm_ccn_mass) -
    430      &    zq0(1:ngrid,1:nlay,igcm_ccn_mass))/ptimestep
    431         pdqcloud(1:ngrid,1:nlay,igcm_ccn_number) =
     430     &    zq0(1:ngrid,1:nlay,igcm_ccn_mass))/microtimestep
     431        subpdqcloud(1:ngrid,1:nlay,igcm_ccn_number) =
    432432     &   (zq(1:ngrid,1:nlay,igcm_ccn_number) -
    433      &    zq0(1:ngrid,1:nlay,igcm_ccn_number))/ptimestep
     433     &    zq0(1:ngrid,1:nlay,igcm_ccn_number))/microtimestep
    434434     
    435435      if (scavenging) then
    436436     
    437         pdqcloud(1:ngrid,1:nlay,igcm_dust_mass) =
     437        subpdqcloud(1:ngrid,1:nlay,igcm_dust_mass) =
    438438     &   (zq(1:ngrid,1:nlay,igcm_dust_mass) -
    439      &    zq0(1:ngrid,1:nlay,igcm_dust_mass))/ptimestep
    440         pdqcloud(1:ngrid,1:nlay,igcm_dust_number) =
     439     &    zq0(1:ngrid,1:nlay,igcm_dust_mass))/microtimestep
     440        subpdqcloud(1:ngrid,1:nlay,igcm_dust_number) =
    441441     &   (zq(1:ngrid,1:nlay,igcm_dust_number) -
    442      &    zq0(1:ngrid,1:nlay,igcm_dust_number))/ptimestep
     442     &    zq0(1:ngrid,1:nlay,igcm_dust_number))/microtimestep
    443443         
    444444      endif
  • trunk/LMDZ.MARS/libf/phymars/watercloud_mod.F

    r1880 r1909  
    9898
    9999      ! global tendency (clouds+physics)
    100       REAL subpdq(ngrid,nlay,nq)      ! cf. pdqcloud
    101       REAL subpdt(ngrid,nlay)         ! cf. pdtcloud
     100      REAL sum_subpdq(ngrid,nlay,nq)      ! cf. pdqcloud
     101      REAL sum_subpdt(ngrid,nlay)         ! cf. pdtcloud
    102102
    103103      ! no supersaturation when option supersat is false
     
    119119      REAL ::  spant ! delta T for the temperature distribution
    120120!      REAL :: zqsat(ngrid,nlay) ! saturation
    121       REAL :: zteff(ngrid, nlay)! effective temperature in the cloud,neb
     121      REAL :: pteff(ngrid, nlay)! effective temperature in the cloud,neb
    122122      REAL :: pqeff(ngrid, nlay, nq)! effective tracers quantities in the cloud
    123123      REAL :: cloudfrac(ngrid,nlay) ! cloud fraction
     
    158158     
    159159c-----Initialization
    160       subpdq(1:ngrid,1:nlay,1:nq) = 0
    161       subpdt(1:ngrid,1:nlay)      = 0
     160      sum_subpdq(1:ngrid,1:nlay,1:nq) = 0
     161      sum_subpdt(1:ngrid,1:nlay)      = 0
    162162     
    163163      ! default value if no ice
     
    168168c------------------
    169169c-----Initialization
    170       zteff(1:ngrid,1:nlay) = 0
     170      pteff(1:ngrid,1:nlay) = 0
    171171      pqeff(1:ngrid,1:nlay,1:nq) = 0
    172172      DO l=1,nlay
    173173        DO ig=1,ngrid
    174              zteff(ig,l)=pt(ig,l)
     174             pteff(ig,l)=pt(ig,l)
    175175        END DO
    176176      END DO
     
    212212              zdelt=spant !MAX(spant*ztclf(ig,l),1.e-12), now totally in K. Fixed width
    213213              IF (tcond(ig,l) .ge. (ztclf(ig,l)+zdelt)) THEN
    214                  zteff(ig,l)=ztclf(ig,l)
     214                 pteff(ig,l)=ztclf(ig,l)
    215215                 cloudfrac(ig,l)=1.
    216216              ELSE IF (tcond(ig,l) .le. (ztclf(ig,l)-zdelt)) THEN
    217                  zteff(ig,l)=ztclf(ig,l)-zdelt
     217                 pteff(ig,l)=ztclf(ig,l)-zdelt
    218218                 cloudfrac(ig,l)=mincloud
    219219              ELSE
    220220                 cloudfrac(ig,l)=(tcond(ig,l)-ztclf(ig,l)+zdelt)/
    221221     &                           (2.0*zdelt)
    222                  zteff(ig,l)=(tcond(ig,l)+ztclf(ig,l)-zdelt)/2.
     222                 pteff(ig,l)=(tcond(ig,l)+ztclf(ig,l)-zdelt)/2.
    223223              END IF
    224               zteff(ig,l)=zteff(ig,l)-pdt(ig,l)*ptimestep
     224              pteff(ig,l)=pteff(ig,l)-pdt(ig,l)*ptimestep
    225225              IF (cloudfrac(ig,l).le.mincloud) THEN !MV17: replaced .le.0 by .le.mincloud
    226226                 cloudfrac(ig,l)=mincloud
     
    251251         pqeff(:,:,igcm_h2o_ice)=pq(:,:,igcm_h2o_ice)/
    252252     &                           cloudfrac(:,:)
    253       END IF ! end if (CLFvarying)
    254       !! MV17: CLFvarying outputs
     253      !! CLFvarying outputs
    255254      CALL WRITEDIAGFI(ngrid,'pqeffice','pqeffice',
    256255     &             'kg/kg',3,pqeff(:,:,igcm_h2o_ice))
    257       CALL WRITEDIAGFI(ngrid,'zteff','zteff',
    258      &             'K',3,zteff(:,:))
     256      CALL WRITEDIAGFI(ngrid,'pteff','pteff',
     257     &             'K',3,pteff(:,:))
    259258      CALL WRITEDIAGFI(ngrid,'tcond','tcond',
    260259     &             'K',3,tcond(:,:))
    261260      CALL WRITEDIAGFI(ngrid,'cloudfrac','cloudfrac',
    262261     &             'K',3,cloudfrac(:,:))
     262      END IF ! end if (CLFvarying)
    263263c------------------------------------------------------------------
    264264c Time subsampling for microphysics
     
    277277        DO l=1,nlay
    278278          DO ig=1,ngrid
    279              subpdt(ig,l) = subpdt(ig,l)
     279             sum_subpdt(ig,l) = sum_subpdt(ig,l)
    280280     &        + pdt(ig,l) ! At each micro timestep we add pdt in order to have a stepped entry
    281281          ENDDO
    282282        ENDDO
    283 c------ Tracers tendencies subpdq
     283c------ Tracers tendencies subpdq are additionned
    284284c------ At each micro timestep we add pdq in order to have a stepped entry
    285285        IF (microphys) THEN
    286286          DO l=1,nlay
    287287            DO ig=1,ngrid
    288               subpdq(ig,l,igcm_dust_mass) =
    289      &            subpdq(ig,l,igcm_dust_mass)
     288              sum_subpdq(ig,l,igcm_dust_mass) =
     289     &            sum_subpdq(ig,l,igcm_dust_mass)
    290290     &          + pdq(ig,l,igcm_dust_mass)
    291               subpdq(ig,l,igcm_dust_number) =
    292      &            subpdq(ig,l,igcm_dust_number)
     291              sum_subpdq(ig,l,igcm_dust_number) =
     292     &            sum_subpdq(ig,l,igcm_dust_number)
    293293     &          + pdq(ig,l,igcm_dust_number)
    294               subpdq(ig,l,igcm_ccn_mass) =
    295      &            subpdq(ig,l,igcm_ccn_mass)
     294              sum_subpdq(ig,l,igcm_ccn_mass) =
     295     &            sum_subpdq(ig,l,igcm_ccn_mass)
    296296     &          + pdq(ig,l,igcm_ccn_mass)
    297               subpdq(ig,l,igcm_ccn_number) =
    298      &            subpdq(ig,l,igcm_ccn_number)
     297              sum_subpdq(ig,l,igcm_ccn_number) =
     298     &            sum_subpdq(ig,l,igcm_ccn_number)
    299299     &          + pdq(ig,l,igcm_ccn_number)
    300300            ENDDO
     
    303303        DO l=1,nlay
    304304          DO ig=1,ngrid
    305             subpdq(ig,l,igcm_h2o_ice) =
    306      &          subpdq(ig,l,igcm_h2o_ice)
     305            sum_subpdq(ig,l,igcm_h2o_ice) =
     306     &          sum_subpdq(ig,l,igcm_h2o_ice)
    307307     &        + pdq(ig,l,igcm_h2o_ice)
    308             subpdq(ig,l,igcm_h2o_vap) =
    309      &          subpdq(ig,l,igcm_h2o_vap)
     308            sum_subpdq(ig,l,igcm_h2o_vap) =
     309     &          sum_subpdq(ig,l,igcm_h2o_vap)
    310310     &        + pdq(ig,l,igcm_h2o_vap)
    311311          ENDDO
     
    317317        IF (microphys) THEN
    318318           CALL improvedclouds(ngrid,nlay,microtimestep,
    319      &             pplay,zteff,subpdt,
    320      &             pqeff,subpdq,subpdqcloud,subpdtcloud,
     319     &             pplay,pteff,sum_subpdt,
     320     &             pqeff,sum_subpdq,subpdqcloud,subpdtcloud,
    321321     &             nq,tauscaling)
    322322
    323323        ELSE
    324324           CALL simpleclouds(ngrid,nlay,microtimestep,
    325      &             pplay,pzlay,zteff,subpdt,
    326      &             pqeff,subpdq,subpdqcloud,subpdtcloud,
     325     &             pplay,pzlay,pteff,sum_subpdt,
     326     &             pqeff,sum_subpdq,subpdqcloud,subpdtcloud,
    327327     &             nq,tau,rice)
    328328        ENDIF
     
    335335          DO l=1,nlay
    336336            DO ig=1,ngrid
    337               subpdq(ig,l,igcm_dust_mass) =
    338      &            subpdq(ig,l,igcm_dust_mass)
     337              sum_subpdq(ig,l,igcm_dust_mass) =
     338     &            sum_subpdq(ig,l,igcm_dust_mass)
    339339     &          + subpdqcloud(ig,l,igcm_dust_mass)
    340               subpdq(ig,l,igcm_dust_number) =
    341      &            subpdq(ig,l,igcm_dust_number)
     340              sum_subpdq(ig,l,igcm_dust_number) =
     341     &            sum_subpdq(ig,l,igcm_dust_number)
    342342     &          + subpdqcloud(ig,l,igcm_dust_number)
    343               subpdq(ig,l,igcm_ccn_mass) =
    344      &            subpdq(ig,l,igcm_ccn_mass)
     343              sum_subpdq(ig,l,igcm_ccn_mass) =
     344     &            sum_subpdq(ig,l,igcm_ccn_mass)
    345345     &          + subpdqcloud(ig,l,igcm_ccn_mass)
    346               subpdq(ig,l,igcm_ccn_number) =
    347      &            subpdq(ig,l,igcm_ccn_number)
     346              sum_subpdq(ig,l,igcm_ccn_number) =
     347     &            sum_subpdq(ig,l,igcm_ccn_number)
    348348     &          + subpdqcloud(ig,l,igcm_ccn_number)
    349349            ENDDO
     
    352352        DO l=1,nlay
    353353          DO ig=1,ngrid
    354             subpdq(ig,l,igcm_h2o_ice) =
    355      &          subpdq(ig,l,igcm_h2o_ice)
     354            sum_subpdq(ig,l,igcm_h2o_ice) =
     355     &          sum_subpdq(ig,l,igcm_h2o_ice)
    356356     &        + subpdqcloud(ig,l,igcm_h2o_ice)
    357             subpdq(ig,l,igcm_h2o_vap) =
    358      &          subpdq(ig,l,igcm_h2o_vap)
     357            sum_subpdq(ig,l,igcm_h2o_vap) =
     358     &          sum_subpdq(ig,l,igcm_h2o_vap)
    359359     &        + subpdqcloud(ig,l,igcm_h2o_vap)
    360360          ENDDO
     
    364364          DO l=1,nlay
    365365            DO ig=1,ngrid
    366               subpdt(ig,l) =
    367      &            subpdt(ig,l) + subpdtcloud(ig,l)
     366              sum_subpdt(ig,l) =
     367     &            sum_subpdt(ig,l) + subpdtcloud(ig,l)
    368368            ENDDO
    369369          ENDDO
     
    381381         DO ig=1,ngrid
    382382             pdtcloud(ig,l) =
    383      &         subpdt(ig,l)/real(imicro)-pdt(ig,l)
     383     &         sum_subpdt(ig,l)/real(imicro)-pdt(ig,l)
    384384          ENDDO
    385385       ENDDO
     
    389389         DO ig=1,ngrid
    390390            pdqcloud(ig,l,igcm_h2o_ice) =
    391      &        subpdq(ig,l,igcm_h2o_ice)/real(imicro)
     391     &        sum_subpdq(ig,l,igcm_h2o_ice)/real(imicro)
    392392     &       - pdq(ig,l,igcm_h2o_ice)
    393393            pdqcloud(ig,l,igcm_h2o_vap) =
    394      &        subpdq(ig,l,igcm_h2o_vap)/real(imicro)
     394     &        sum_subpdq(ig,l,igcm_h2o_vap)/real(imicro)
    395395     &       - pdq(ig,l,igcm_h2o_vap)
    396396         ENDDO
     
    401401         DO ig=1,ngrid
    402402            pdqcloud(ig,l,igcm_ccn_mass) =
    403      &        subpdq(ig,l,igcm_ccn_mass)/real(imicro)
     403     &        sum_subpdq(ig,l,igcm_ccn_mass)/real(imicro)
    404404     &       - pdq(ig,l,igcm_ccn_mass)
    405405            pdqcloud(ig,l,igcm_ccn_number) =
    406      &        subpdq(ig,l,igcm_ccn_number)/real(imicro)
     406     &        sum_subpdq(ig,l,igcm_ccn_number)/real(imicro)
    407407     &       - pdq(ig,l,igcm_ccn_number)
    408408         ENDDO
     
    414414         DO ig=1,ngrid
    415415            pdqcloud(ig,l,igcm_dust_mass) =
    416      &        subpdq(ig,l,igcm_dust_mass)/real(imicro)
     416     &        sum_subpdq(ig,l,igcm_dust_mass)/real(imicro)
    417417     &       - pdq(ig,l,igcm_dust_mass)
    418418            pdqcloud(ig,l,igcm_dust_number) =
    419      &        subpdq(ig,l,igcm_dust_number)/real(imicro)
     419     &        sum_subpdq(ig,l,igcm_dust_number)/real(imicro)
    420420     &       - pdq(ig,l,igcm_dust_number)
    421421         ENDDO
Note: See TracChangeset for help on using the changeset viewer.