Changeset 1911


Ignore:
Timestamp:
Mar 9, 2018, 6:19:27 PM (7 years ago)
Author:
mvals
Message:

Mars GCM
"cosmetics" changes in co2cloud and improvedCO2clouds to better understand the role of the variables:

  • in co2cloud : - change of variables subpdq and subpdt in sum_subpdq and sum_subpdt to make clear we ae making the sum of the tendencies in the microphysics loop.
    • change of variables pdqsed in subpdqsed as these are tendencies inside the microphysics loop
    • flag "sedimentation" has been added for the sedimentation block
    • variables names in the sedimentation block have been changed (tempo_traceurs becomes zqsed, sav_trac becomes zqsed0)
    • variable sum_subpdqs_sedco2 was added in the microphysics loop to make clear we make the sum of the surface sedimentation flux, output variable is still pdqs_sedco2
    • variable sum_subpdqs_sedco2 has been initialized to zero
    • zteff has been changed to pteff to be logical with the other variables names
  • in improvedCO2clouds : change of the names of input and output variables according to their names in co2cloud in order to not confuse them (in improvedCO2clouds "ptimestep" corresponds actually to

"microtimestep").

MV

Location:
trunk/LMDZ.MARS
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/README

    r1910 r1911  
    25252525- in improvedclouds : change of the names of input and output variables according to their names in watercloud_mod in order to not confuse them (in improvedclouds "ptimestep" corresponds actually to "microtimestep").
    25262526- in watercloud_mod, CLFvarying block : change of the name zteff in pteff to be logical with the other variables names, and writediagfi lines have been moved to the CLFvarying block.
     2527
     2528== 09/03/2018 == MV
     2529"cosmetics" changes in co2cloud and improvedCO2clouds to better understand the role of the variables:
     2530- in co2cloud : - change of variables subpdq and subpdt in sum_subpdq and sum_subpdt to make clear we are making the sum of the tendencies in the microphysics loop.
     2531                - change of variables pdqsed in subpdqsed as these are tendencies inside the microphysics loop
     2532                - flag "sedimentation" has been added for the sedimentation block
     2533                - variables names in the sedimentation block have been changed (tempo_traceurs becomes zqsed, sav_trac becomes zqsed0)
     2534                - variable sum_subpdqs_sedco2 was added in the microphysics loop to make clear we make the sum of the surface sedimentation flux, output variable is still pdqs_sedco2
     2535                - variable sum_subpdqs_sedco2 has been initialized to zero
     2536                - zteff has been changed to pteff to be logical with the other variables names
     2537- in improvedCO2clouds : change of the names of input and output variables according to their names in co2cloud in order to not confuse them (in improvedCO2clouds "ptimestep" corresponds actually to "microtimestep").
     2538
  • trunk/LMDZ.MARS/libf/phymars/co2cloud.F

    r1885 r1911  
    8181      real, INTENT(IN) :: pq(ngrid,nlay,nq)     ! tracers (kg/kg)
    8282      real, INTENT(IN) :: pdq(ngrid,nlay,nq)    ! tendencies before condensation  (kg/kg.s-1)
    83       real, intent(out) :: pdqcloudco2(ngrid,nlay,nq) ! tendency due to CO2 condensation (kg/kg.s-1)
    84       real, intent(out) :: pdtcloudco2(ngrid,nlay)    ! tendency on temperature due to latent heat
     83      real, intent(OUT) :: pdqcloudco2(ngrid,nlay,nq) ! tendency due to CO2 condensation (kg/kg.s-1)
     84      real, intent(OUT) :: pdtcloudco2(ngrid,nlay)    ! tendency on temperature due to latent heat
    8585      INTEGER, INTENT(IN) :: nq                 ! number of tracers
    8686      REAL, INTENT(IN) :: tau(ngrid,naerkind) ! Column dust optical depth at each point
     
    9191      DOUBLE PRECISION, INTENT(out) :: riceco2(ngrid,nlay)    ! Ice mass mean radius (m)
    9292                               ! (r_c in montmessin_2004)
    93       REAL, INTENT(in) :: nuice(ngrid,nlay)   ! Estimated effective variance
     93      REAL, INTENT(IN) :: nuice(ngrid,nlay)   ! Estimated effective variance
    9494                               !   of the size distribution
    95       real, intent(out) :: rsedcloudco2(ngrid,nlay) ! Cloud sedimentation radius
    96       real, intent(out) :: rhocloudco2(ngrid,nlay)  ! Cloud density (kg.m-3)
    97       real, intent(out) :: rsedcloud(ngrid,nlay) ! Water Cloud sedimentation radius
    98       real, intent(out) :: rhocloud(ngrid,nlay)  ! Water Cloud density (kg.m-3)
    99       real, intent(in) :: pzlev(ngrid,nlay+1) ! altitude at the boundaries of the layers
    100       real, intent(out) :: pdqs_sedco2(ngrid) ! CO2 flux at the surface
     95      real, intent(OUT) :: rsedcloudco2(ngrid,nlay) ! Cloud sedimentation radius
     96      real, intent(OUT) :: rhocloudco2(ngrid,nlay)  ! Cloud density (kg.m-3)
     97      real, intent(OUT) :: rsedcloud(ngrid,nlay) ! Water Cloud sedimentation radius
     98      real, intent(OUT) :: rhocloud(ngrid,nlay)  ! Water Cloud density (kg.m-3)
     99      real, intent(IN) :: pzlev(ngrid,nlay+1) ! altitude at the boundaries of the layers
     100      real, intent(OUT) :: pdqs_sedco2(ngrid) ! CO2 flux at the surface
    101101      REAL, INTENT(IN) :: pdu(ngrid,nlay),pu(ngrid,nlay) !Zonal Wind: zu=pu+pdu*ptimestep
    102102
     
    114114
    115115      ! global tendency (clouds+physics)
    116       REAL subpdq(ngrid,nlay,nq)      ! cf. pdqcloud
    117       REAL subpdt(ngrid,nlay)         ! cf. pdtcloud
     116      REAL sum_subpdq(ngrid,nlay,nq)      ! cf. pdqcloud
     117      REAL sum_subpdt(ngrid,nlay)         ! cf. pdtcloud
    118118      real wq(ngrid,nlay+1)  !  ! displaced tracer mass (kg.m-2) during microtimestep because sedim (?/m-2)
    119119
     
    131131      real epaisseur (ngrid,nlay) ! Layer thickness (m)
    132132      real masse (ngrid,nlay) ! Layer mass (kg.m-2)
    133       real tempo_traceur_t(ngrid,nlay) ! tracers with real-time value in microtimeloop
    134       real tempo_traceurs(ngrid,nlay,nq)
    135       real sav_trac(ngrid,nlay,nq) !For sedimentation tendancy
    136       real pdqsed(ngrid,nlay,nq)
     133      real ztsed(ngrid,nlay) ! tracers with real-time value in microtimeloop
     134      real zqsed(ngrid,nlay,nq)
     135      real zqsed0(ngrid,nlay,nq) !For sedimentation tendancy
     136      real subpdqsed(ngrid,nlay,nq)
     137      real sum_subpdqs_sedco2(ngrid) ! CO2 flux at the surface
    137138
    138139      DOUBLE PRECISION,allocatable,save :: memdMMccn(:,:) !memory of h2o particles
     
    171172      REAL ::  zqice(ngrid,nlay)
    172173      REAL ::  spant,zdelt ! delta T for the temperature distribution
    173       REAL ::  zteff(ngrid, nlay)! effective temperature in the cloud,neb
     174      REAL ::  pteff(ngrid, nlay)! effective temperature in the cloud,neb
    174175      REAL ::  pqeff(ngrid, nlay, nq)! effective tracers quantities in the cloud
    175176      REAL ::  co2cloudfrac(ngrid,nlay) ! cloud fraction
     
    309310      dev2 = 1. / ( sqrt(2.) * sigma_iceco2 )
    310311      beta=0.85
    311       subpdq(1:ngrid,1:nlay,1:nq) = 0
    312       subpdt(1:ngrid,1:nlay)      = 0
     312      sum_subpdq(1:ngrid,1:nlay,1:nq) = 0
     313      sum_subpdt(1:ngrid,1:nlay)      = 0
    313314      subpdqcloudco2(1:ngrid,1:nlay,1:nq) = 0
    314315      subpdtcloudco2(1:ngrid,1:nlay)      = 0
     
    321322      masse(1:ngrid,1:nlay)=0
    322323
    323       sav_trac(1:ngrid,1:nlay,1:nq)=0
    324       pdqsed(1:ngrid,1:nlay,1:nq)=0
     324      zqsed0(1:ngrid,1:nlay,1:nq)=0
     325      sum_subpdqs_sedco2(1:ngrid)=0
     326      subpdqsed(1:ngrid,1:nlay,1:nq)=0
    325327     
    326328      do  l=1,nlay
     
    338340         spant=spantCO2         ! delta T for the temprature distribution
    339341         mincloud=0.1           ! min co2cloudfrac when there is ice 
    340          zteff(:,:)=pt(:,:)
     342         pteff(:,:)=pt(:,:)
    341343         co2cloudfrac(:,:)=mincloud
    342344         
     
    411413               IF (tcond(ig,l) .ge. (zt(ig,l)+zdelt)
    412414     &             .or. tcond(ig,l) .le. 0 ) THEN !The entire fraction is saturated
    413                   zteff(ig,l)=zt(ig,l)
     415                  pteff(ig,l)=zt(ig,l)
    414416                  co2cloudfrac(ig,l)=1.
    415417               ELSE IF (tcond(ig,l) .le. (zt(ig,l)-zdelt)) THEN ! No saturation at all
    416                   zteff(ig,l)=zt(ig,l)-zdelt
     418                  pteff(ig,l)=zt(ig,l)-zdelt
    417419                  co2cloudfrac(ig,l)=mincloud
    418420               ELSE
    419421                  co2cloudfrac(ig,l)=(tcond(ig,l)-zt(ig,l)+zdelt)/
    420422     &                 (2.0*zdelt)
    421                   zteff(ig,l)=(tcond(ig,l)+zt(ig,l)-zdelt)/2. !Mean temperature of the cloud fraction
     423                  pteff(ig,l)=(tcond(ig,l)+zt(ig,l)-zdelt)/2. !Mean temperature of the cloud fraction
    422424               END IF           !ig if (tcond(ig,l) ...
    423                zteff(ig,l)=zteff(ig,l)-pdt(ig,l)*ptimestep
     425               pteff(ig,l)=pteff(ig,l)-pdt(ig,l)*ptimestep
    424426               IF (co2cloudfrac(ig,l).le. mincloud) THEN
    425427                  co2cloudfrac(ig,l)=mincloud
     
    430432           ELSE
    431433!SatIndex not favorable for GW : leave pt untouched
    432              zteff(ig,l)=pt(ig,l)
     434             pteff(ig,l)=pt(ig,l)
    433435             co2cloudfrac(ig,l)=mincloud
    434436           ENDIF                 ! of if(SatIndexmap...
     
    440442         DO l=1,nlay
    441443            DO ig=1,ngrid
    442                zteff(ig,l)=pt(ig,l)
     444               pteff(ig,l)=pt(ig,l)
    443445            END DO
    444446         END DO
     
    456458        DO l=1,nlay
    457459          DO ig=1,ngrid
    458                subpdt(ig,l) = subpdt(ig,l)
     460               sum_subpdt(ig,l) = sum_subpdt(ig,l)
    459461     &              + pdt(ig,l) ! At each micro timestep we add pdt in order to have a stepped entry
    460                subpdq(ig,l,igcm_dust_mass) =
    461      &              subpdq(ig,l,igcm_dust_mass)
     462               sum_subpdq(ig,l,igcm_dust_mass) =
     463     &              sum_subpdq(ig,l,igcm_dust_mass)
    462464     &              + pdq(ig,l,igcm_dust_mass)
    463                subpdq(ig,l,igcm_dust_number) =
    464      &              subpdq(ig,l,igcm_dust_number)
     465               sum_subpdq(ig,l,igcm_dust_number) =
     466     &              sum_subpdq(ig,l,igcm_dust_number)
    465467     &              + pdq(ig,l,igcm_dust_number)
    466468
    467                subpdq(ig,l,igcm_ccnco2_mass) =
    468      &              subpdq(ig,l,igcm_ccnco2_mass)
     469               sum_subpdq(ig,l,igcm_ccnco2_mass) =
     470     &              sum_subpdq(ig,l,igcm_ccnco2_mass)
    469471     &              + pdq(ig,l,igcm_ccnco2_mass)
    470                subpdq(ig,l,igcm_ccnco2_number) =
    471      &              subpdq(ig,l,igcm_ccnco2_number)
     472               sum_subpdq(ig,l,igcm_ccnco2_number) =
     473     &              sum_subpdq(ig,l,igcm_ccnco2_number)
    472474     &              + pdq(ig,l,igcm_ccnco2_number)
    473475
    474                subpdq(ig,l,igcm_co2_ice) =
    475      &              subpdq(ig,l,igcm_co2_ice)
     476               sum_subpdq(ig,l,igcm_co2_ice) =
     477     &              sum_subpdq(ig,l,igcm_co2_ice)
    476478     &              + pdq(ig,l,igcm_co2_ice)
    477                subpdq(ig,l,igcm_co2) =
    478      &              subpdq(ig,l,igcm_co2)
     479               sum_subpdq(ig,l,igcm_co2) =
     480     &              sum_subpdq(ig,l,igcm_co2)
    479481     &              + pdq(ig,l,igcm_co2)
    480482
    481                subpdq(ig,l,igcm_h2o_ice) =
    482      &              subpdq(ig,l,igcm_h2o_ice)
     483               sum_subpdq(ig,l,igcm_h2o_ice) =
     484     &              sum_subpdq(ig,l,igcm_h2o_ice)
    483485     &              + pdq(ig,l,igcm_h2o_ice)
    484                subpdq(ig,l,igcm_ccn_mass) =
    485      &              subpdq(ig,l,igcm_ccn_mass)
     486               sum_subpdq(ig,l,igcm_ccn_mass) =
     487     &              sum_subpdq(ig,l,igcm_ccn_mass)
    486488     &              + pdq(ig,l,igcm_ccn_mass)
    487                subpdq(ig,l,igcm_ccn_number) =
    488      &              subpdq(ig,l,igcm_ccn_number)
     489               sum_subpdq(ig,l,igcm_ccn_number) =
     490     &              sum_subpdq(ig,l,igcm_ccn_number)
    489491     &              + pdq(ig,l,igcm_ccn_number)
    490492          ENDDO
     
    507509c   call to sedimentation routine, update tendancies
    508510c------------------------------------------------------
     511        IF (sedimentation) THEN
     512       
    509513        DO l=1, nlay
    510514          DO ig=1,ngrid             
    511              tempo_traceur_t(ig,l)=zteff(ig,l)+subpdt(ig,l)
    512      &            *microtimestep
    513              tempo_traceurs(ig,l,:)=pqeff(ig,l,:)
    514      &            +subpdq(ig,l,:)*microtimestep
     515             ztsed(ig,l)=pteff(ig,l)
     516     &            +sum_subpdt(ig,l)*microtimestep
     517             zqsed(ig,l,:)=pqeff(ig,l,:)
     518     &            +sum_subpdq(ig,l,:)*microtimestep
    515519             rho_ice_co2T(ig,l)=1000.*(1.72391-2.53e-4*
    516      &            tempo_traceur_t(ig,l)-2.87e-6*
    517      &            tempo_traceur_t(ig,l)*tempo_traceur_t(ig,l))
     520     &            ztsed(ig,l)-2.87e-6*
     521     &            ztsed(ig,l)*ztsed(ig,l))
    518522             
    519523             rho_ice_co2=rho_ice_co2T(ig,l)
    520              Niceco2=max(tempo_traceurs(ig,l,igcm_co2_ice),1.e-30)
    521              Nccnco2=max(tempo_traceurs(ig,l,igcm_ccnco2_number),
     524             Niceco2=max(zqsed(ig,l,igcm_co2_ice),1.e-30)
     525             Nccnco2=max(zqsed(ig,l,igcm_ccnco2_number),
    522526     &            1.e-30)
    523              Qccnco2=max(tempo_traceurs(ig,l,igcm_ccnco2_mass),
     527             Qccnco2=max(zqsed(ig,l,igcm_ccnco2_mass),
    524528     &            1.e-30)
    525529             call updaterice_microco2(Niceco2,
     
    538542        ENDDO
    539543!     Gravitational sedimentation       
    540         sav_trac(:,:,igcm_co2_ice)=tempo_traceurs(:,:,igcm_co2_ice)
    541         sav_trac(:,:,igcm_ccnco2_mass)=
    542      &      tempo_traceurs(:,:,igcm_ccnco2_mass)
    543         sav_trac(:,:,igcm_ccnco2_number)=
    544      &      tempo_traceurs(:,:,igcm_ccnco2_number)
     544        zqsed0(:,:,igcm_co2_ice)=zqsed(:,:,igcm_co2_ice)
     545        zqsed0(:,:,igcm_ccnco2_mass)=zqsed(:,:,igcm_ccnco2_mass)
     546        zqsed0(:,:,igcm_ccnco2_number)=zqsed(:,:,igcm_ccnco2_number)
    545547       !We save actualized tracer values to compute sedimentation tendancies
    546548        call newsedim(ngrid,nlay,ngrid*nlay,ngrid*nlay,
    547      &     microtimestep,pplev,masse,epaisseur,tempo_traceur_t,
     549     &     microtimestep,pplev,masse,epaisseur,ztsed,
    548550     &     rsedcloudco2,rhocloudco2t,
    549      &     tempo_traceurs(:,:,igcm_co2_ice),wq,beta) !  3 traceurs
     551     &     zqsed(:,:,igcm_co2_ice),wq,beta) !  3 traceurs
    550552!     sedim at the surface of co2 ice : keep track of it for physiq_mod
    551553        do ig=1,ngrid
    552           pdqs_sedco2(ig)=pdqs_sedco2(ig)+ wq(ig,1)/microtimestep
     554          sum_subpdqs_sedco2(ig)=
     555     &         sum_subpdqs_sedco2(ig)+ wq(ig,1)/microtimestep
    553556        end do
    554557        call newsedim(ngrid,nlay,ngrid*nlay,ngrid*nlay,
    555      &     microtimestep,pplev,masse,epaisseur,tempo_traceur_t,
     558     &     microtimestep,pplev,masse,epaisseur,ztsed,
    556559     &     rsedcloudco2,rhocloudco2t,
    557      &     tempo_traceurs(:,:,igcm_ccnco2_mass),wq,beta)
     560     &     zqsed(:,:,igcm_ccnco2_mass),wq,beta)
    558561        call newsedim(ngrid,nlay,ngrid*nlay,ngrid*nlay,
    559      &     microtimestep,pplev,masse,epaisseur,tempo_traceur_t,
     562     &     microtimestep,pplev,masse,epaisseur,ztsed,
    560563     &     rsedcloudco2,rhocloudco2t,
    561      &     tempo_traceurs(:,:,igcm_ccnco2_number),wq,beta)
     564     &     zqsed(:,:,igcm_ccnco2_number),wq,beta)
    562565        DO l = 1, nlay            !Compute tendencies
    563566          DO ig=1,ngrid
    564             pdqsed(ig,l,igcm_ccnco2_mass)=
    565      &           (tempo_traceurs(ig,l,igcm_ccnco2_mass)-
    566      &           sav_trac(ig,l,igcm_ccnco2_mass))/microtimestep
    567             pdqsed(ig,l,igcm_ccnco2_number)=
    568      &           (tempo_traceurs(ig,l,igcm_ccnco2_number)-
    569      &           sav_trac(ig,l,igcm_ccnco2_number))/microtimestep
    570             pdqsed(ig,l,igcm_co2_ice)=
    571      &           (tempo_traceurs(ig,l,igcm_co2_ice)-
    572      &           sav_trac(ig,l,igcm_co2_ice))/microtimestep
     567            subpdqsed(ig,l,igcm_ccnco2_mass)=
     568     &           (zqsed(ig,l,igcm_ccnco2_mass)-
     569     &           zqsed0(ig,l,igcm_ccnco2_mass))/microtimestep
     570            subpdqsed(ig,l,igcm_ccnco2_number)=
     571     &           (zqsed(ig,l,igcm_ccnco2_number)-
     572     &           zqsed0(ig,l,igcm_ccnco2_number))/microtimestep
     573            subpdqsed(ig,l,igcm_co2_ice)=
     574     &           (zqsed(ig,l,igcm_co2_ice)-
     575     &           zqsed0(ig,l,igcm_co2_ice))/microtimestep
    573576          ENDDO
    574577        ENDDO
     
    576579        DO l=1,nlay
    577580         DO ig=1,ngrid
    578             subpdq(ig,l,igcm_ccnco2_mass) =
    579      &           subpdq(ig,l,igcm_ccnco2_mass)
    580      &           +pdqsed(ig,l,igcm_ccnco2_mass)
    581             subpdq(ig,l,igcm_ccnco2_number) =
    582      &           subpdq(ig,l,igcm_ccnco2_number)
    583      &           +pdqsed(ig,l,igcm_ccnco2_number)
    584             subpdq(ig,l,igcm_co2_ice) =
    585      &           subpdq(ig,l,igcm_co2_ice)
    586      &           +pdqsed(ig,l,igcm_co2_ice)
     581            sum_subpdq(ig,l,igcm_ccnco2_mass) =
     582     &           sum_subpdq(ig,l,igcm_ccnco2_mass)
     583     &           +subpdqsed(ig,l,igcm_ccnco2_mass)
     584            sum_subpdq(ig,l,igcm_ccnco2_number) =
     585     &           sum_subpdq(ig,l,igcm_ccnco2_number)
     586     &           +subpdqsed(ig,l,igcm_ccnco2_number)
     587            sum_subpdq(ig,l,igcm_co2_ice) =
     588     &           sum_subpdq(ig,l,igcm_co2_ice)
     589     &           +subpdqsed(ig,l,igcm_co2_ice)
    587590         ENDDO
    588         ENDDO   
     591        ENDDO
     592       
     593        END IF !(end if sedimentation)
     594       
    589595c------------------------------------------------------
    590596c      2.  Main call to the cloud schemes:
    591597c------------------------------------------------------
    592598        CALL improvedCO2clouds(ngrid,nlay,microtimestep,
    593      &     pplay,pplev,zteff,subpdt,
    594      &     pqeff,subpdq,subpdqcloudco2,subpdtcloudco2,
     599     &     pplay,pplev,pteff,sum_subpdt,
     600     &     pqeff,sum_subpdq,subpdqcloudco2,subpdtcloudco2,
    595601     &     nq,tauscaling,memdMMccn,memdMMh2o,memdNNccn)
    596602c-----------------------------------------------------
     
    599605        DO l=1,nlay
    600606          DO ig=1,ngrid
    601                subpdt(ig,l) =
    602      &              subpdt(ig,l) + subpdtcloudco2(ig,l)
    603 
    604                subpdq(ig,l,igcm_dust_mass) =
    605      &              subpdq(ig,l,igcm_dust_mass)
     607               sum_subpdt(ig,l) =
     608     &              sum_subpdt(ig,l) + subpdtcloudco2(ig,l)
     609
     610               sum_subpdq(ig,l,igcm_dust_mass) =
     611     &              sum_subpdq(ig,l,igcm_dust_mass)
    606612     &              + subpdqcloudco2(ig,l,igcm_dust_mass)
    607                subpdq(ig,l,igcm_dust_number) =
    608      &              subpdq(ig,l,igcm_dust_number)
     613               sum_subpdq(ig,l,igcm_dust_number) =
     614     &              sum_subpdq(ig,l,igcm_dust_number)
    609615     &              + subpdqcloudco2(ig,l,igcm_dust_number)
    610616
    611                subpdq(ig,l,igcm_ccnco2_mass) =
    612      &              subpdq(ig,l,igcm_ccnco2_mass)
     617               sum_subpdq(ig,l,igcm_ccnco2_mass) =
     618     &              sum_subpdq(ig,l,igcm_ccnco2_mass)
    613619     &              + subpdqcloudco2(ig,l,igcm_ccnco2_mass)
    614                subpdq(ig,l,igcm_ccnco2_number) =
    615      &              subpdq(ig,l,igcm_ccnco2_number)
     620               sum_subpdq(ig,l,igcm_ccnco2_number) =
     621     &              sum_subpdq(ig,l,igcm_ccnco2_number)
    616622     &              + subpdqcloudco2(ig,l,igcm_ccnco2_number)
    617623
    618                subpdq(ig,l,igcm_co2_ice) =
    619      &              subpdq(ig,l,igcm_co2_ice)
     624               sum_subpdq(ig,l,igcm_co2_ice) =
     625     &              sum_subpdq(ig,l,igcm_co2_ice)
    620626     &              + subpdqcloudco2(ig,l,igcm_co2_ice)
    621                subpdq(ig,l,igcm_co2) =
    622      &              subpdq(ig,l,igcm_co2)
     627               sum_subpdq(ig,l,igcm_co2) =
     628     &              sum_subpdq(ig,l,igcm_co2)
    623629     &              + subpdqcloudco2(ig,l,igcm_co2)
    624630
    625                subpdq(ig,l,igcm_h2o_ice) =
    626      &              subpdq(ig,l,igcm_h2o_ice)
     631               sum_subpdq(ig,l,igcm_h2o_ice) =
     632     &              sum_subpdq(ig,l,igcm_h2o_ice)
    627633     &              + subpdqcloudco2(ig,l,igcm_h2o_ice)
    628                subpdq(ig,l,igcm_ccn_mass) =
    629      &              subpdq(ig,l,igcm_ccn_mass)
     634               sum_subpdq(ig,l,igcm_ccn_mass) =
     635     &              sum_subpdq(ig,l,igcm_ccn_mass)
    630636     &              + subpdqcloudco2(ig,l,igcm_ccn_mass)
    631                subpdq(ig,l,igcm_ccn_number) =
    632      &              subpdq(ig,l,igcm_ccn_number)
     637               sum_subpdq(ig,l,igcm_ccn_number) =
     638     &              sum_subpdq(ig,l,igcm_ccn_number)
    633639     &              + subpdqcloudco2(ig,l,igcm_ccn_number)
    634640          ENDDO
     
    641647c CO2 flux at surface (kg.m-2.s-1)
    642648      do ig=1,ngrid
    643          pdqs_sedco2(ig)=pdqs_sedco2(ig)/real(imicroco2)
     649         pdqs_sedco2(ig)=sum_subpdqs_sedco2(ig)/real(imicroco2)
    644650      enddo
    645651c------ Temperature tendency pdtcloud
     
    647653        DO ig=1,ngrid
    648654             pdtcloudco2(ig,l) =
    649      &         subpdt(ig,l)/real(imicroco2)-pdt(ig,l)
     655     &         sum_subpdt(ig,l)/real(imicroco2)-pdt(ig,l)
    650656        ENDDO
    651657      ENDDO
     
    654660        DO ig=1,ngrid       
    655661             pdqcloudco2(ig,l,igcm_co2_ice) =
    656      &            subpdq(ig,l,igcm_co2_ice)/real(imicroco2)
     662     &            sum_subpdq(ig,l,igcm_co2_ice)/real(imicroco2)
    657663     &            - pdq(ig,l,igcm_co2_ice)
    658664             pdqcloudco2(ig,l,igcm_co2) =
    659      &            subpdq(ig,l,igcm_co2)/real(imicroco2)
     665     &            sum_subpdq(ig,l,igcm_co2)/real(imicroco2)
    660666     &            - pdq(ig,l,igcm_co2)
    661667             pdqcloudco2(ig,l,igcm_h2o_ice) =
    662      &            subpdq(ig,l,igcm_h2o_ice)/real(imicroco2)
     668     &            sum_subpdq(ig,l,igcm_h2o_ice)/real(imicroco2)
    663669     &            - pdq(ig,l,igcm_h2o_ice)
    664670        ENDDO
     
    667673        DO ig=1,ngrid
    668674             pdqcloudco2(ig,l,igcm_ccnco2_mass) =
    669      &            subpdq(ig,l,igcm_ccnco2_mass)/real(imicroco2)
     675     &            sum_subpdq(ig,l,igcm_ccnco2_mass)/real(imicroco2)
    670676     &            - pdq(ig,l,igcm_ccnco2_mass)
    671677             pdqcloudco2(ig,l,igcm_ccnco2_number) =
    672      &            subpdq(ig,l,igcm_ccnco2_number)/real(imicroco2)
     678     &            sum_subpdq(ig,l,igcm_ccnco2_number)/real(imicroco2)
    673679     &            - pdq(ig,l,igcm_ccnco2_number)
    674680             pdqcloudco2(ig,l,igcm_ccn_mass) =
    675      &            subpdq(ig,l,igcm_ccn_mass)/real(imicroco2)
     681     &            sum_subpdq(ig,l,igcm_ccn_mass)/real(imicroco2)
    676682     &            - pdq(ig,l,igcm_ccn_mass)
    677683             pdqcloudco2(ig,l,igcm_ccn_number) =
    678      &            subpdq(ig,l,igcm_ccn_number)/real(imicroco2)
     684     &            sum_subpdq(ig,l,igcm_ccn_number)/real(imicroco2)
    679685     &            - pdq(ig,l,igcm_ccn_number)
    680686        ENDDO
     
    683689        DO ig=1,ngrid
    684690             pdqcloudco2(ig,l,igcm_dust_mass) =
    685      &            subpdq(ig,l,igcm_dust_mass)/real(imicroco2)
     691     &            sum_subpdq(ig,l,igcm_dust_mass)/real(imicroco2)
    686692     &            - pdq(ig,l,igcm_dust_mass)
    687693             pdqcloudco2(ig,l,igcm_dust_number) =
    688      &            subpdq(ig,l,igcm_dust_number)/real(imicroco2)
     694     &            sum_subpdq(ig,l,igcm_dust_number)/real(imicroco2)
    689695     &            - pdq(ig,l,igcm_dust_number)
    690696        ENDDO
     
    776782     &             ,1.e-30)
    777783             
    778               myT=zteff(ig,l)+(pdt(ig,l)+pdtcloudco2(ig,l))*ptimestep
     784              myT=pteff(ig,l)+(pdt(ig,l)+pdtcloudco2(ig,l))*ptimestep
    779785              rho_ice_co2T(ig,l)=1000.*(1.72391-2.53e-4*
    780786     &             myT-2.87e-6* myT* myT)
     
    859865      ENDDO
    860866       
    861       call co2sat(ngrid*nlay,zteff+(pdt+pdtcloudco2)*ptimestep
     867      call co2sat(ngrid*nlay,pteff+(pdt+pdtcloudco2)*ptimestep
    862868     &      ,pplay,zqsatco2)
    863869      do l=1,nlay
  • trunk/LMDZ.MARS/libf/phymars/improvedCO2clouds.F

    r1884 r1911  
    1       subroutine improvedCO2clouds(ngrid,nlay,ptimestep,
    2      &             pplay,pplev,pt,pdt,
    3      &             pq,pdq,pdqcloudco2,pdtcloudco2,
     1      subroutine improvedCO2clouds(ngrid,nlay,microtimestep,
     2     &             pplay,pplev,pteff,sum_subpdt,
     3     &             pqeff,sum_subpdq,subpdqcloudco2,subpdtcloudco2,
    44     &             nq,tauscaling,
    55     &             memdMMccn,memdMMh2o,memdNNccn)
     
    6161      INTEGER,INTENT(in) :: ngrid,nlay
    6262      integer,intent(in) :: nq         ! number of tracers
    63       REAL,INTENT(in) :: ptimestep     ! physics time step (s)
     63      REAL,INTENT(in) :: microtimestep     ! physics time step (s)
    6464      REAL,INTENT(in) :: pplay(ngrid,nlay)     ! mid-layer pressure (Pa)
    6565      REAL,INTENT(in) :: pplev(ngrid,nlay+1)   ! inter-layer pressure (Pa)
    66       REAL,INTENT(in) :: pt(ngrid,nlay) ! temperature at the middle of the
     66      REAL,INTENT(in) :: pteff(ngrid,nlay) ! temperature at the middle of the
    6767                                 !   layers (K)
    68       REAL,INTENT(in) :: pdt(ngrid,nlay) ! tendency on temperature from
     68      REAL,INTENT(in) :: sum_subpdt(ngrid,nlay) ! tendency on temperature from
    6969                                 !  previous physical parametrizations
    70       REAL,INTENT(in) :: pq(ngrid,nlay,nq) ! tracers (kg/kg)
    71       REAL,INTENT(in) :: pdq(ngrid,nlay,nq) ! tendencies on tracers
     70      REAL,INTENT(in) :: pqeff(ngrid,nlay,nq) ! tracers (kg/kg)
     71      REAL,INTENT(in) :: sum_subpdq(ngrid,nlay,nq) ! tendencies on tracers
    7272                                 !  before condensation (kg/kg.s-1)
    7373      REAL,INTENT(in) :: tauscaling(ngrid) ! Convertion factor for qdust and Ndust
    7474c     Outputs:
    75       REAL,INTENT(out) :: pdqcloudco2(ngrid,nlay,nq) ! tendency on tracers
     75      REAL,INTENT(out) :: subpdqcloudco2(ngrid,nlay,nq) ! tendency on tracers
    7676                                   ! due to CO2 condensation (kg/kg.s-1)
    7777      ! condensation si igcm_co2_ice
    78       REAL,INTENT(out) :: pdtcloudco2(ngrid,nlay)  ! tendency on temperature due
     78      REAL,INTENT(out) :: subpdtcloudco2(ngrid,nlay)  ! tendency on temperature due
    7979                                   ! to latent heat
    8080
     
    302302
    303303c     Initialize the tendencies
    304       pdqcloudco2(1:ngrid,1:nlay,1:nq)=0.
    305       pdtcloudco2(1:ngrid,1:nlay)=0.
    306      
    307 c pt temperature layer; pdt dT.s-1
    308 c pq traceur kg/kg; pdq tendance idem .s-1
     304      subpdqcloudco2(1:ngrid,1:nlay,1:nq)=0.
     305      subpdtcloudco2(1:ngrid,1:nlay)=0.
     306     
     307c pteff temperature layer; sum_subpdt dT.s-1
     308c pqeff traceur kg/kg; sum_subpdq tendance idem .s-1
    309309      zt(1:ngrid,1:nlay) =
    310      &      pt(1:ngrid,1:nlay) +
    311      &      pdt(1:ngrid,1:nlay) * ptimestep
     310     &      pteff(1:ngrid,1:nlay) +
     311     &      sum_subpdt(1:ngrid,1:nlay) * microtimestep
    312312      zq(1:ngrid,1:nlay,1:nq) =
    313      &      pq(1:ngrid,1:nlay,1:nq) +
    314      &      pdq(1:ngrid,1:nlay,1:nq) * ptimestep
     313     &      pqeff(1:ngrid,1:nlay,1:nq) +
     314     &      sum_subpdq(1:ngrid,1:nlay,1:nq) * microtimestep
    315315      WHERE( zq(1:ngrid,1:nlay,1:nq) < 1.e-30 )
    316316     &     zq(1:ngrid,1:nlay,1:nq) = 1.e-30
     
    443443              dMh2o = 0.
    444444              do i = 1, nbinco2_cld
    445                  Proba=1.0-dexp(-1.*ptimestep*rate(i))
    446                  Probah2o=coeffh2o*(1.0-dexp(-1.*ptimestep*rateh2o(i))) !if co2useh2o=.false., this is =0
     445                 Proba=1.0-dexp(-1.*microtimestep*rate(i))
     446                 Probah2o=coeffh2o*
     447     &            (1.0-dexp(-1.*microtimestep*rateh2o(i))) !if co2useh2o=.false., this is =0
    447448                 dNh2o    = dNh2o + n_aer_h2oice(i) * Probah2o
    448449                 dMh2o    = dMh2o + m_aer_h2oice(i) * Probah2o
     
    517518                 Ic_rice=0.
    518519                 flag_pourri=1
    519                  pdtcloudco2(ig,l)=-pdt(ig,l)
     520                 subpdtcloudco2(ig,l)=-sum_subpdt(ig,l)
    520521                 dMice=0
    521522                 
    522523              else
    523                  dMice=zq(ig,l,igcm_ccnco2_number)*Ic_rice*ptimestep
     524                 dMice=zq(ig,l,igcm_ccnco2_number)*Ic_rice*microtimestep
    524525     &                *tauscaling(ig) ! Kg par kg d'air, >0 si croissance !
    525526                 !kg.s-1 par particule * nb particule par kg air*s
     
    530531!facteurmax maximum quantity of CO2 that can sublime/condense according to available thermal energy
    531532! latent heat release       >0 if growth i.e. if dMice >0
    532               pdtcloudco2(ig,l)=dMice*lw/cpp/ptimestep
     533              subpdtcloudco2(ig,l)=dMice*lw/cpp/microtimestep
    533534! kgco2/kgair* J/kgco2 * 1/(J.kgair-1.K-1)/s= K par seconde
    534535              !Now update tracers
     
    588589
    589590          ! Get cloud tendencies
    590         pdqcloudco2(1:ngrid,1:nlay,igcm_co2) =
     591        subpdqcloudco2(1:ngrid,1:nlay,igcm_co2) =
    591592     &       (zq(1:ngrid,1:nlay,igcm_co2) -
    592      &       zq0(1:ngrid,1:nlay,igcm_co2))/ptimestep
    593         pdqcloudco2(1:ngrid,1:nlay,igcm_co2_ice) =
     593     &       zq0(1:ngrid,1:nlay,igcm_co2))/microtimestep
     594        subpdqcloudco2(1:ngrid,1:nlay,igcm_co2_ice) =
    594595     &       (zq(1:ngrid,1:nlay,igcm_co2_ice) -
    595      &       zq0(1:ngrid,1:nlay,igcm_co2_ice))/ptimestep
    596         pdqcloudco2(1:ngrid,1:nlay,igcm_h2o_ice) =
     596     &       zq0(1:ngrid,1:nlay,igcm_co2_ice))/microtimestep
     597        subpdqcloudco2(1:ngrid,1:nlay,igcm_h2o_ice) =
    597598     &       (zq(1:ngrid,1:nlay,igcm_h2o_ice) -
    598      &       zq0(1:ngrid,1:nlay,igcm_h2o_ice))/ptimestep
    599         pdqcloudco2(1:ngrid,1:nlay,igcm_ccn_mass) =
     599     &       zq0(1:ngrid,1:nlay,igcm_h2o_ice))/microtimestep
     600        subpdqcloudco2(1:ngrid,1:nlay,igcm_ccn_mass) =
    600601     &       (zq(1:ngrid,1:nlay,igcm_ccn_mass) -
    601      &       zq0(1:ngrid,1:nlay,igcm_ccn_mass))/ptimestep
    602         pdqcloudco2(1:ngrid,1:nlay,igcm_ccn_number) =
     602     &       zq0(1:ngrid,1:nlay,igcm_ccn_mass))/microtimestep
     603        subpdqcloudco2(1:ngrid,1:nlay,igcm_ccn_number) =
    603604     &       (zq(1:ngrid,1:nlay,igcm_ccn_number) -
    604      &       zq0(1:ngrid,1:nlay,igcm_ccn_number))/ptimestep
    605         pdqcloudco2(1:ngrid,1:nlay,igcm_ccnco2_mass) =
     605     &       zq0(1:ngrid,1:nlay,igcm_ccn_number))/microtimestep
     606        subpdqcloudco2(1:ngrid,1:nlay,igcm_ccnco2_mass) =
    606607     &       (zq(1:ngrid,1:nlay,igcm_ccnco2_mass) -
    607      &       zq0(1:ngrid,1:nlay,igcm_ccnco2_mass))/ptimestep
    608         pdqcloudco2(1:ngrid,1:nlay,igcm_ccnco2_number) =
     608     &       zq0(1:ngrid,1:nlay,igcm_ccnco2_mass))/microtimestep
     609        subpdqcloudco2(1:ngrid,1:nlay,igcm_ccnco2_number) =
    609610     &       (zq(1:ngrid,1:nlay,igcm_ccnco2_number) -
    610      &       zq0(1:ngrid,1:nlay,igcm_ccnco2_number))/ptimestep
    611         pdqcloudco2(1:ngrid,1:nlay,igcm_dust_mass) =
     611     &       zq0(1:ngrid,1:nlay,igcm_ccnco2_number))/microtimestep
     612        subpdqcloudco2(1:ngrid,1:nlay,igcm_dust_mass) =
    612613     &       (zq(1:ngrid,1:nlay,igcm_dust_mass) -
    613      &       zq0(1:ngrid,1:nlay,igcm_dust_mass))/ptimestep
    614         pdqcloudco2(1:ngrid,1:nlay,igcm_dust_number) =
     614     &       zq0(1:ngrid,1:nlay,igcm_dust_mass))/microtimestep
     615        subpdqcloudco2(1:ngrid,1:nlay,igcm_dust_number) =
    615616     &       (zq(1:ngrid,1:nlay,igcm_dust_number) -
    616      &       zq0(1:ngrid,1:nlay,igcm_dust_number))/ptimestep
     617     &       zq0(1:ngrid,1:nlay,igcm_dust_number))/microtimestep
    617618
    618619        end
Note: See TracChangeset for help on using the changeset viewer.