Changeset 2562 for trunk


Ignore:
Timestamp:
Sep 21, 2021, 9:02:49 AM (4 years ago)
Author:
cmathe
Message:

GCM MARS: CO2 clouds microphysics improvements

Location:
trunk/LMDZ.MARS
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/README

    r2561 r2562  
    24662466microphysics (just like water clouds). The amplitude is spantCO2, also read from callphys.def
    24672467- The previous logical microphysco2 has been removed.
    2468 - Cloud opacity at 1µm is now computed in the co2cloud.F routine
     2468- Cloud opacity at 1µm is now computed in the co2cloud.F routine
    24692469- Most of the co2 ice clouds scheme writediagfi are now in co2clouds.F
    24702470- Some cleaning of the CO2 ice clouds routine has been done. Not perfect yet!
     
    24822482  if a gravity wave propagates to the mesosphere or not (wheter the wave saturates on its way or not).
    24832483  The sub-grid temperature distribution is cancelled if the saturation index value of the column (between 12 and 80 km) is > 0.1, and is applied (+/- 3K) otherwise. if the keyword satindexco2=.true. in callphys.def (only applies if CLFvaryingCO2=.true. anyway). If set to .false., deactivate this filter and the sub grid T distribution applies everywhere and everytime. See comments in co2clouds.F
    2484 - All that you need to launch a GCM run with co2 clouds is described in co2clouds.F comments. Ehouarn Millour and Anni Määttänen have the files.
     2484- All that you need to launch a GCM run with co2 clouds is described in co2clouds.F comments. Ehouarn Millour and Anni Määttänen have the files.
    24852485 
    24862486== 15/11/2017 == EM
     
    34463446== 07/09/2021 == EM
    34473447Some code cleanup and refactoring around wstats:
    3448 - turn wstats.F90 in a module
     3448- turn wstats.F90in a module
    34493449- remove no useless statto_mod.F90
    34503450- incorporate auxilliary inistats and mkstats routines in wstats_mod.F90
     
    34593459h2o_ice_s into watercap if the amount of h2o_ice_s is above the frost_metam_threshold (on watercaptag only).
    34603460One could see it as water frost converted into perennial ice.
     3461
     3462== 20/09/2021 == CM
     3463CO2 clouds microphysics improvements:
     3464 - add sedimentation at the surface of CNs tracers
     3465 - add tracers ccnco2_h2o_mass_ice, ccnco2_h2o_mass_ccn, ccnco2_h2o_number in place of mem_Nccn_co2, mem_Qccn_co2
     3466 - modification of updaterice_microco2 to take into account water ice as CN and not only dust as CN
  • trunk/LMDZ.MARS/libf/phymars/callsedim_mod.F

    r2447 r2562  
    159159      INTEGER,SAVE :: iccnco2_number ! index of tracer containing CCN number
    160160      INTEGER,SAVE :: iccnco2_mass ! index of tracer containing CCN number
     161      INTEGER,SAVE :: iccnco2_h2o_number ! index of tracer containing CCN number
     162      INTEGER,SAVE :: iccnco2_h2o_mass_ice ! index of tracer containing CCN number
     163      INTEGER,SAVE :: iccnco2_h2o_mass_ccn ! index of tracer containing CCN number
    161164      INTEGER,SAVE :: ico2_ice ! index of tracer containing CCN number
    162165
     
    241244          iccnco2_mass=0
    242245          iccnco2_number=0
     246          iccnco2_h2o_mass_ice=0
     247          iccnco2_h2o_mass_ccn=0
     248          iccnco2_h2o_number=0
    243249          ico2_ice=0
    244250          do iq=1,nq
     
    254260              iccnco2_number=iq
    255261              write(*,*)"callsedim: iccnco2_number=",iccnco2_number
     262            endif
     263            if (noms(iq).eq."ccnco2_h2o_number") then
     264              iccnco2_h2o_number=iq
     265              write(*,*)"callsedim: iccnco2_h2o_number=",
     266     &                   iccnco2_h2o_number
     267            endif
     268            if (noms(iq).eq."ccnco2_h2o_mass_ice") then
     269              iccnco2_h2o_mass_ice=iq
     270              write(*,*)"callsedim: iccnco2_h2o_mass_ice=",
     271     &                 iccnco2_h2o_mass_ice
     272            endif
     273            if (noms(iq).eq."ccnco2_h2o_mass_ccn") then
     274              iccnco2_h2o_mass_ccn=iq
     275              write(*,*)"callsedim: iccnco2_h2o_mass_ccn=",
     276     &                 iccnco2_h2o_mass_ccn
    256277            endif
    257278          enddo
     
    263284            call abort_physic(modname,"missing co2 ccn tracers",1)
    264285          endif
     286          if (co2useh2o) then
     287            if((iccnco2_h2o_mass_ccn.eq.0).or.
     288     &         (iccnco2_h2o_mass_ice.eq.0).or.
     289     &         (iccnco2_h2o_number.eq.0)) then
     290            write(*,*) 'callsedim: error! could not identify'
     291            write(*,*) ' tracers for ccn co2 mass and number mixing'
     292            write(*,*) ' ratio and co2clouds are activated!'
     293            call abort_physic(modname,"missing co2 ccn tracers",1)
     294           end if
     295          end if
    265296       ENDIF                    !of if (co2clouds)
    266297
     
    398429        if(radius(iq).gt.1.e-9 .and.(iq.ne.ico2_ice) .and.
    399430     &        (iq .ne. iccnco2_mass) .and. (iq .ne.
    400      &        iccnco2_number) .and. ! no sedim for gaz or CO2 clouds  (done in microtimestep)
     431     &        iccnco2_number) .and.
     432     &        (iq.ne.iccnco2_h2o_number).and.
     433     &        (iq.ne.iccnco2_h2o_mass_ice).and.
     434     &        (iq.ne.iccnco2_h2o_mass_ccn).and.  ! no sedim for gaz or CO2 clouds  (done in microtimestep)
    401435     &        iq .ne. igcm_hdo_ice) then !MVals: hdo is transported by h2o
    402436c -----------------------------------------------------------------
  • trunk/LMDZ.MARS/libf/phymars/co2cloud.F90

    r2524 r2562  
    77! Contains subroutines:
    88!      - co2cloud: of co2 cloud microphysics
    9 !
    10 !      - ini_co2cloud: (only used in phys_state_var_init_mod.F90)
    11 !
    12 !      - end_co2cloud: (only used in phys_state_var_init_mod.F90)
    139!======================================================================================================================!
    1410module co2cloud_mod
    1511
    1612implicit none
    17 
    18 double precision, allocatable, save :: &
    19    mem_Mccn_co2(:,:), &! Memory of CCN mass of H2O and dust used by CO2
    20    mem_Mh2o_co2(:,:), &! Memory of H2O mass integred into CO2 crystal
    21    mem_Nccn_co2(:,:)   ! Memory of CCN number of H2O and dust used by CO2
    2213
    2314contains
     
    9889!======================================================================================================================!
    9990  subroutine co2cloud(ngrid, nlay, ptimestep, pplev, pplay, pdpsrf, pzlay, pt, pdt, pq, pdq, pdqcloudco2, pdtcloudco2, &
    100                       nq, tau, tauscaling, rdust, rice, riceco2, nuice, rhocloud, rsedcloudco2, rhocloudco2, pzlev, pdqs_sedco2, pdu, &
    101                       pu, pcondicea, co2ice)
     91                      nq, tau, tauscaling, rdust, rice, riceco2, nuice, rhocloud, rsedcloudco2, rhocloudco2, pzlev,&
     92                      pdqs_sedco2, pdqs_sedccn, pdu, pu, pcondicea, co2ice)
    10293
    10394  use ioipsl_getincom, only: getin
     
    10798  use conc_mod,        only: mmean, rnew
    10899  use tracer_mod,      only: igcm_co2, igcm_co2_ice, igcm_dust_mass, igcm_dust_number, igcm_h2o_ice, &
    109                              igcm_ccn_mass, igcm_ccn_number, igcm_ccnco2_mass, igcm_ccnco2_number, rho_dust, &
     100                             igcm_ccn_mass, igcm_ccn_number, igcm_ccnco2_mass, igcm_ccnco2_number, &
     101                             igcm_ccnco2_h2o_number, igcm_ccnco2_h2o_mass_ice, igcm_ccnco2_h2o_mass_ccn, rho_dust, &
    110102                             nuiceco2_sed, nuiceco2_ref, r3n_q, rho_ice, nuice_sed
    111103
     
    159151     rhocloud(ngrid,nlay),      & ! Water Cloud density (kg.m-3)
    160152     pdqs_sedco2(ngrid),        & ! CO2 flux at the surface
     153     pdqs_sedccn(ngrid,nq),      & ! CCN flux at the surface
    161154     pdqcloudco2(ngrid,nlay,nq),& ! Tendency due to CO2 condensation (kg/kg.s-1)
    162155     pcondicea(ngrid,nlay),     & ! Rate of condensation/sublimation of co2 ice in layers
     
    240233     subpdqsed(ngrid,nlay,nq),      &! Tendancy due to sedimentation
    241234     sum_subpdqs_sedco2(ngrid),     &! CO2 flux at the surface
    242 !  ---For sub grid T distribution
     235     sum_subpdqs_sedccn(ngrid,nq),  &!
     236      !  ---For sub grid T distribution
    243237     zt(ngrid,nlay),                &! Local value of temperature
    244238     zq_co2vap(ngrid, nlay),        &! Local value of CO2 vap
     
    251245     Nccnco2,                       &! buffer: number of ccn used for co2 condensation
    252246     Qccnco2,                       &! buffer: mass of ccn used for co2 condensation
     247     Nccnco2_h2o, &
     248     Qccnco2_h2o, &
    253249     Niceco2,                       &! buffer: mmr co2 ice
    254250     epaisseur(ngrid,nlay),         &! Layer thickness (m)
     
    420416  zqsed0(1:ngrid,1:nlay,1:nq) = 0.
    421417  sum_subpdqs_sedco2(1:ngrid) = 0.
     418  sum_subpdqs_sedccn(1:ngrid,1:nq) = 0.
    422419  subpdqsed(1:ngrid,1:nlay,1:nq) = 0.
    423420!----------------------------------------------------------------------------------------------------------------------!
     
    600597
    601598         sum_subpdq(ig,l,igcm_ccn_number) = sum_subpdq(ig,l,igcm_ccn_number) + pdq(ig,l,igcm_ccn_number)
     599
     600        sum_subpdq(ig,l,igcm_ccnco2_h2o_number) = sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + &
     601                                                  pdq(ig,l,igcm_ccnco2_h2o_number)
     602
     603        sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) + &
     604                                                    pdq(ig,l,igcm_ccnco2_h2o_mass_ice)
     605
     606        sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) + &
     607                                                    pdq(ig,l,igcm_ccnco2_h2o_mass_ccn)
    602608       end if
    603609     end do ! ngrid
     
    607613!----------------------------------------------------------------------------------------------------------------------!
    608614   call improvedco2clouds(ngrid, nlay, microtimestep, pplay, pplev, pteff, sum_subpdt, pqeff, sum_subpdq, &
    609                           subpdqcloudco2, subpdtcloudco2, nq, tauscaling, mem_Mccn_co2, mem_Mh2o_co2, mem_Nccn_co2, &
    610                           rb_cldco2, sigma_iceco2, dev2)
     615                          subpdqcloudco2, subpdtcloudco2, nq, tauscaling, rb_cldco2, sigma_iceco2, dev2)
    611616
    612617   do l = 1, nlay
    613618     do ig = 1, ngrid
    614619       if(pq(ig,l,igcm_co2_ice) + microtimestep*(sum_subpdq(ig,l,igcm_co2_ice)+subpdqcloudco2(ig,l,igcm_co2_ice)) &
    615          .le. 1.e-12) then
     620         <= 1.e-12) then
    616621         subpdqcloudco2(ig,l,igcm_co2_ice) = -pq(ig,l,igcm_co2_ice)/microtimestep - sum_subpdq(ig,l,igcm_co2_ice)
    617622         subpdqcloudco2(ig,l,igcm_co2) = -subpdqcloudco2(ig,l,igcm_co2_ice)
    618623       end if
    619624
    620        if(pq(ig,l,igcm_co2) + microtimestep*(sum_subpdq(ig,l,igcm_co2)+subpdqcloudco2(ig,l,igcm_co2)) .le. 1.e-12) then
     625       if(pq(ig,l,igcm_co2) + microtimestep*(sum_subpdq(ig,l,igcm_co2)+subpdqcloudco2(ig,l,igcm_co2)) <= 1.e-12) then
    621626         subpdqcloudco2(ig,l,igcm_co2) =  - pq(ig,l,igcm_co2)/microtimestep - sum_subpdq(ig,l,igcm_co2)
    622627         subpdqcloudco2(ig,l,igcm_co2_ice) = -subpdqcloudco2(ig,l,igcm_co2)
    623628       end if
     629
    624630  ! ccnco2_number and ccnco2_mass
    625631       if (((pq(ig,l,igcm_ccnco2_number)+(sum_subpdq(ig,l,igcm_ccnco2_number)+subpdqcloudco2(ig,l,igcm_ccnco2_number)) &
    626           *microtimestep).le.1.) .or. &
     632          *microtimestep)<=1.) .or. &
    627633         (pq(ig,l,igcm_ccnco2_mass)+(sum_subpdq(ig,l,igcm_ccnco2_mass)+subpdqcloudco2(ig,l,igcm_ccnco2_mass)) &
    628           *microtimestep.le.1e-20)) then
     634          *microtimestep<=1e-20)) then
    629635         subpdqcloudco2(ig,l,igcm_ccnco2_number) = - pq(ig,l,igcm_ccnco2_number)/microtimestep + 1. &
    630636                                                  - sum_subpdq(ig,l,igcm_ccnco2_number)
     
    635641         subpdqcloudco2(ig,l,igcm_dust_mass) = - subpdqcloudco2(ig,l,igcm_ccnco2_mass)
    636642       end if
     643
     644   ! ccnco2_h2o_number and masses
     645       if (co2useh2o) then
     646         if (((pq(ig,l,igcm_ccnco2_h2o_number) + (sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + &
     647           subpdqcloudco2(ig,l,igcm_ccnco2_h2o_number)) &
     648            *microtimestep)<=1.) .or. &
     649           (pq(ig,l,igcm_ccnco2_h2o_mass_ice)+pq(ig,l,igcm_ccnco2_h2o_mass_ccn) +&
     650           (sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice)+subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) +&
     651           sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn)+subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn)) &
     652            *microtimestep<=1e-20)) then
     653
     654           subpdqcloudco2(ig,l,igcm_ccnco2_h2o_number) = - pq(ig,l,igcm_ccnco2_h2o_number)/microtimestep + 1. &
     655                                                         - sum_subpdq(ig,l,igcm_ccnco2_h2o_number)
     656           subpdqcloudco2(ig,l,igcm_ccn_number) = - subpdqcloudco2(ig,l,igcm_ccnco2_h2o_number)
     657
     658           subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) = - pq(ig,l,igcm_ccnco2_h2o_mass_ice)/microtimestep + 1e-20 &
     659                                                           - sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice)
     660
     661           subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn) = - pq(ig,l,igcm_ccnco2_h2o_mass_ccn)/microtimestep + 1e-20 &
     662                                                           - sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn)
     663
     664           subpdqcloudco2(ig,l,igcm_ccn_mass) = - subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) &
     665                                                - subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn)
     666         end if
     667       end if
    637668     end do
    638669   end do
     
    663694
    664695          sum_subpdq(ig,l,igcm_ccn_number) = sum_subpdq(ig,l,igcm_ccn_number) + subpdqcloudco2(ig,l,igcm_ccn_number)
     696
     697          sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) + &
     698                                                      subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice)
     699
     700          sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) + &
     701                                                      subpdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn)
     702
     703          sum_subpdq(ig,l,igcm_ccnco2_h2o_number) = sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + &
     704                                                    subpdqcloudco2(ig,l,igcm_ccnco2_number)
     705
    665706        end if
    666707      end do ! ngrid
     
    686727          Qccnco2 = max(zqsed(ig,l,igcm_ccnco2_mass), threshold)
    687728
     729          Nccnco2_h2o = 0.
     730          Qccnco2_h2o = 0.
     731          if (co2useh2o) then
     732            Nccnco2_h2o = max(zqsed(ig,l,igcm_ccnco2_h2o_number), threshold)
     733            Qccnco2_h2o = max(zqsed(ig,l,igcm_ccnco2_h2o_mass_ice)+zqsed(ig,l,igcm_ccnco2_h2o_mass_ccn), threshold)
     734            Nccnco2 = Nccnco2 - Nccnco2_h2o
     735            Qccnco2 = Qccnco2 - Qccnco2_h2o
     736          end if
     737
    688738          ! Get density cloud and co2 ice particle radius
    689           if (Niceco2.ne.0d0) then
    690             call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), ztsed(ig,l), tauscaling(ig), &
    691                                      riceco2(ig,l), rhocloudco2t(ig,l))
     739          if (Niceco2/=0d0) then
     740            call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), dble(Qccnco2_h2o), dble(Nccnco2_h2o),&
     741                                     ztsed(ig,l), tauscaling(ig), riceco2(ig,l), rhocloudco2t(ig,l))
    692742          else
    693743            riceco2(ig,l) = 0.
     
    702752      zqsed0(:,:,igcm_ccnco2_mass) = zqsed(:,:,igcm_ccnco2_mass)
    703753      zqsed0(:,:,igcm_ccnco2_number) = zqsed(:,:,igcm_ccnco2_number)
     754
     755      if (co2useh2o) then
     756        zqsed0(:,:,igcm_ccnco2_h2o_number) = zqsed(:,:,igcm_ccnco2_h2o_number)
     757        zqsed0(:,:,igcm_ccnco2_h2o_mass_ice) = zqsed(:,:,igcm_ccnco2_h2o_mass_ice)
     758        zqsed0(:,:,igcm_ccnco2_h2o_mass_ccn) = zqsed(:,:,igcm_ccnco2_h2o_mass_ccn)
     759      end if
    704760!----------------------------------------------------------------------------------------------------------------------!
    705761! 4.3.c. Sedimentation of co2 ice
     
    726782      call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay, microtimestep, pplev, masse, epaisseur, ztsed, &
    727783                   rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_mass), wq, beta)
    728       !TODO: ajouter le calcule de la tendance a la surface comme co2ice
     784      do ig = 1, ngrid
     785        sum_subpdqs_sedccn(ig,igcm_ccnco2_mass) = sum_subpdqs_sedccn(ig,igcm_ccnco2_mass) + wq(ig,1) / microtimestep
     786      end do
    729787
    730788      wq(:,:) = 0.
     
    732790      call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay,microtimestep, pplev, masse, epaisseur, ztsed, &
    733791                   rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_number), wq, beta)
    734       !TODO: ajouter le calcule de la tendance a la surface comme co2ice
     792      do ig = 1, ngrid
     793        sum_subpdqs_sedccn(ig,igcm_ccnco2_number) = sum_subpdqs_sedccn(ig,igcm_ccnco2_number) + wq(ig,1) / microtimestep
     794      end do
     795
     796      ! for ccnco2_h2o_mass_ice
     797      if (co2useh2o) then
     798        wq(:,:) = 0.
     799        call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay,microtimestep, pplev, masse, epaisseur, ztsed, &
     800                     rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_h2o_mass_ice), wq, beta)
     801        do ig = 1, ngrid
     802          sum_subpdqs_sedccn(ig,igcm_ccnco2_h2o_mass_ice) = sum_subpdqs_sedccn(ig,igcm_ccnco2_h2o_mass_ice) + &
     803                                                            wq(ig,1) / microtimestep
     804        end do
     805
     806        wq(:,:) = 0.
     807        ! for ccnco2_h2o_mass_ccn
     808        call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay,microtimestep, pplev, masse, epaisseur, ztsed, &
     809                     rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_h2o_mass_ccn), wq, beta)
     810        do ig = 1, ngrid
     811          sum_subpdqs_sedccn(ig,igcm_ccnco2_h2o_mass_ccn) = sum_subpdqs_sedccn(ig,igcm_ccnco2_h2o_mass_ccn) + &
     812                                                            wq(ig,1) / microtimestep
     813        end do
     814
     815        wq(:,:) = 0.
     816        ! for ccnco2_h2o_number
     817        call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay,microtimestep, pplev, masse, epaisseur, ztsed, &
     818                     rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_h2o_number), wq, beta)
     819        do ig = 1, ngrid
     820          sum_subpdqs_sedccn(ig,igcm_ccnco2_h2o_number) = sum_subpdqs_sedccn(ig,igcm_ccnco2_h2o_number) + &
     821                                                            wq(ig,1) / microtimestep
     822        end do
     823      end if
    735824!----------------------------------------------------------------------------------------------------------------------!
    736825! 4.3.e. Compute tendencies due to the sedimation process
     
    745834
    746835          subpdqsed(ig,l,igcm_co2_ice) = ( zqsed(ig,l,igcm_co2_ice) - zqsed0(ig,l,igcm_co2_ice) ) / microtimestep
     836
     837          if (co2useh2o) then
     838          subpdqsed(ig,l,igcm_ccnco2_h2o_number) = ( zqsed(ig,l,igcm_ccnco2_h2o_number) - &
     839                                                     zqsed0(ig,l,igcm_ccnco2_h2o_number) ) / microtimestep
     840
     841          subpdqsed(ig,l,igcm_ccnco2_h2o_mass_ice) = ( zqsed(ig,l,igcm_ccnco2_h2o_mass_ice) - &
     842                                                     zqsed0(ig,l,igcm_ccnco2_h2o_mass_ice) ) / microtimestep
     843
     844          subpdqsed(ig,l,igcm_ccnco2_h2o_mass_ccn) = ( zqsed(ig,l,igcm_ccnco2_h2o_mass_ccn) - &
     845                                                     zqsed0(ig,l,igcm_ccnco2_h2o_mass_ccn) ) / microtimestep
     846          end if
    747847        end do
    748848      end do
     
    755855
    756856          sum_subpdq(ig,l,igcm_co2_ice) = sum_subpdq(ig,l,igcm_co2_ice) + subpdqsed(ig,l,igcm_co2_ice)
     857          if (co2useh2o) then
     858            sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) + &
     859                                                        subpdqsed(ig,l,igcm_ccnco2_h2o_mass_ice)
     860
     861            sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) + &
     862                                                        subpdqsed(ig,l,igcm_ccnco2_h2o_mass_ccn)
     863
     864            sum_subpdq(ig,l,igcm_ccnco2_h2o_number) = sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + &
     865                                                        subpdqsed(ig,l,igcm_ccnco2_h2o_number)
     866          end if
    757867        end do
    758868      end do
     
    772882  do ig = 1, ngrid
    773883    pdqs_sedco2(ig) = sum_subpdqs_sedco2(ig) / real(imicroco2)
     884    pdqs_sedccn(ig,:) = sum_subpdqs_sedccn(ig,:) / real(imicroco2)
    774885  end do
     886
    775887  ! temperature tendency (T.s-1)
    776888  do l = 1, nlay
     
    808920        pdqcloudco2(ig,l,igcm_ccn_number) = ( sum_subpdq(ig,l,igcm_ccn_number) / real(imicroco2) ) - &
    809921                                            pdq(ig,l,igcm_ccn_number)
     922
     923        pdqcloudco2(ig,l,igcm_ccnco2_h2o_number) = ( sum_subpdq(ig,l,igcm_ccnco2_h2o_number) / real(imicroco2) ) - &
     924                                                   pdq(ig,l,igcm_ccnco2_h2o_number)
     925
     926        pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) = ( sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) / real(imicroco2) ) - &
     927                                                   pdq(ig,l,igcm_ccnco2_h2o_mass_ice)
     928
     929        pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn) = ( sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) / real(imicroco2) )- &
     930                                                        pdq(ig,l,igcm_ccnco2_h2o_mass_ccn)
     931
    810932      end if
    811933    end do ! ngrid
     
    831953      myT = pteff(ig,l) + (pdt(ig,l)+pdtcloudco2(ig,l))*ptimestep
    832954
     955      Nccnco2_h2o = 0.
     956      Qccnco2_h2o = 0.
     957      if (co2useh2o) then
     958      Nccnco2_h2o = max( (pqeff(ig,l,igcm_ccnco2_h2o_number) + (pdq(ig,l,igcm_ccnco2_h2o_number) + &
     959                       pdqcloudco2(ig,l, igcm_ccnco2_h2o_number)) * ptimestep) &
     960                    , threshold)
     961
     962      Qccnco2_h2o = max( (pqeff(ig,l,igcm_ccnco2_h2o_mass_ice) + pqeff(ig,l,igcm_ccnco2_h2o_mass_ccn) + &
     963                     (pdq(ig,l,igcm_ccnco2_h2o_mass_ice) + pdq(ig,l,igcm_ccnco2_h2o_mass_ccn) + &
     964                      pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) + pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn)) * &
     965                      ptimestep)&
     966                    , threshold)
     967      Nccnco2 = Nccnco2 - Nccnco2_h2o
     968      Qccnco2 = Qccnco2 - Qccnco2_h2o
     969      end if
    833970      ! Compute particle size
    834       call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), myT, tauscaling(ig), riceco2(ig,l), &
    835                                rhocloudco2(ig,l))
     971      call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), dble(Qccnco2_h2o), dble(Nccnco2_h2o), myT, &
     972                               tauscaling(ig), riceco2(ig,l), rhocloudco2(ig,l))
    836973
    837974     ! Compute opacities
    838       if ( (Niceco2 <= threshold .or. Nccnco2*tauscaling(ig) <= 1.) ) then
     975      if ( (Niceco2 <= threshold .or. (Nccnco2)*tauscaling(ig) <= 1.) ) then ! Nccnco2 inclut Nccnco2_h2o
    839976        riceco2(ig,l) = 0.
    840977        Qext1bins2(ig,l) = 0.
     
    844981
    845982        do i = 1, nbinco2_cld
    846           n_aer(i) = -0.5 * Nccnco2*tauscaling(ig) * n_derf
     983          n_aer(i) = -0.5 * (Nccnco2)*tauscaling(ig) * n_derf
    847984
    848985          n_derf = derf((rb_cldco2(i+1)-log(riceco2(ig,l))) *dev2)
    849           n_aer(i) = n_aer(i) + (0.5 * Nccnco2*tauscaling(ig) * n_derf)
     986          n_aer(i) = n_aer(i) + (0.5 * (Nccnco2)*tauscaling(ig) * n_derf)
    850987
    851988          Qext1bins2(ig,l) = Qext1bins2(ig,l) + Qext1bins(i) * n_aer(i)
     
    9281065
    9291066          pdqcloudco2(ig,l,igcm_ccn_number) = pdqcloudco2(ig,l,igcm_ccn_number) * co2cloudfrac(ig,l)
     1067
     1068          pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) = pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ice) * co2cloudfrac(ig,l)
     1069
     1070          pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn) = pdqcloudco2(ig,l,igcm_ccnco2_h2o_mass_ccn) * co2cloudfrac(ig,l)
     1071
     1072          pdqcloudco2(ig,l,igcm_ccnco2_h2o_number) = pdqcloudco2(ig,l,igcm_ccnco2_h2o_number) * co2cloudfrac(ig,l)
    9301073        end if
    9311074      end do ! ngrid
     
    9601103  call WRITEDIAGFI(ngrid, "tau1mic", "co2 ice opacity 1 micron", " ", 2, tau1mic)
    9611104
    962   call WRITEDIAGFI(ngrid, "mem_Nccn_co2", "CCN number used by CO2", "kg.kg-1", 3, mem_Nccn_co2)
    963 
    964   call WRITEDIAGFI(ngrid, "mem_Mccn_co2", "CCN mass used by CO2",  "kg.kg-1", 3, mem_Mccn_co2)
    965 
    966   call WRITEDIAGFI(ngrid, "mem_Mh2o_co2", "H2O mass in CO2 crystal", "kg.kg-1", 3, mem_Mh2o_co2)
    9671105  if (CLFvaryingCO2) then
    9681106    call WRITEDIAGFI(ngrid, "co2cloudfrac", "co2 cloud fraction", " ", 3, co2cloudfrac)
     
    9731111  end subroutine co2cloud
    9741112
    975 
    976 !**********************************************************************************************************************!
    977 !**********************************************************************************************************************!
    978 
    979 
    980 !======================================================================================================================!
    981 ! SUBROUTINE: ini_co2cloud ============================================================================================!
    982 !======================================================================================================================!
    983 ! Subject:
    984 !---------
    985 !   Allocate arrays used for co2 microphysics
    986 !======================================================================================================================!
    987   subroutine ini_co2cloud(ngrid,nlayer)
    988 
    989   implicit none
    990 
    991   integer, intent(in) :: &
    992      ngrid, &! number of atmospheric columns
    993      nlayer  ! number of atmospheric layers
    994 
    995   allocate(mem_Nccn_co2(ngrid,nlayer))
    996   allocate(mem_Mccn_co2(ngrid,nlayer))
    997   allocate(mem_Mh2o_co2(ngrid,nlayer))
    998 
    999   end subroutine ini_co2cloud
    1000 
    1001 !**********************************************************************************************************************!
    1002 !**********************************************************************************************************************!
    1003 
    1004 !======================================================================================================================!
    1005 ! SUBROUTINE: end_co2cloud ============================================================================================!
    1006 !======================================================================================================================!
    1007 ! Subject:
    1008 !---------
    1009 !   Deallocate arrays used for co2 microphysics
    1010 !======================================================================================================================!
    1011   subroutine end_co2cloud
    1012 
    1013   implicit none
    1014 
    1015   if (allocated(mem_Nccn_co2)) deallocate(mem_Nccn_co2)
    1016   if (allocated(mem_Mccn_co2)) deallocate(mem_Mccn_co2)
    1017   if (allocated(mem_Mh2o_co2)) deallocate(mem_Mh2o_co2)
    1018 
    1019   end subroutine end_co2cloud
    1020 
    10211113end module co2cloud_mod
  • trunk/LMDZ.MARS/libf/phymars/improvedco2clouds_mod.F90

    r2494 r2562  
    6161!======================================================================================================================!
    6262  subroutine improvedCO2clouds(ngrid, nlay, microtimestep, pplay, pplev, pteff, sum_subpdt, pqeff, sum_subpdq, &
    63                                subpdqcloudco2, subpdtcloudco2, nq, tauscaling, mem_Mccn_co2, mem_Mh2o_co2, &
    64                                mem_Nccn_co2, rb_cldco2, sigma_iceco2, dev2)
     63                               subpdqcloudco2, subpdtcloudco2, nq, tauscaling, rb_cldco2, sigma_iceco2, dev2)
    6564
    6665  use comcstfi_h,   only: pi, g, cpp
     
    6968
    7069  use tracer_mod,   only: igcm_dust_mass, igcm_dust_number, rho_dust, igcm_h2o_ice, igcm_ccn_mass, igcm_ccn_number, &
    71                           nuice_sed, igcm_co2, igcm_co2_ice, igcm_ccnco2_mass, igcm_ccnco2_number, nuiceco2_sed, &
     70                          nuice_sed, igcm_co2, igcm_co2_ice, igcm_ccnco2_mass, igcm_ccnco2_number, &
     71                          igcm_ccnco2_h2o_mass_ice, igcm_ccnco2_h2o_mass_ccn, igcm_ccnco2_h2o_number, nuiceco2_sed, &
    7272                          nuiceco2_ref
    7373
    7474  use conc_mod,     only: mmean
    7575
     76  use nucleaco2_mod, only: nucleaco2
    7677  use datafile_mod, only: datadir
    7778
     
    163164
    164165  real :: &
     166    Nccnco2, &
     167    Qccnco2, &
     168    Nccnco2_h2o, &
     169    Qccnco2_h2o, &
    165170    masse(ngrid,nlay),     &! mass layer (kg.m-2)
    166171    rice(ngrid,nlay),      &! water ice mass mean radius (m): used for nucleation of CO2 on ice-coated ccns
     
    189194    n_derf,                            &! derf( (rb_cldco2(1)+Rn) *dev3)
    190195    m_derf,                            &! derf( (rb_cldco2(1)+Rm) *dev2)
    191     mem_Mccn_co2(ngrid,nlay),          &! Memory of CCN mass of H2O and dust used by CO2
    192     mem_Mh2o_co2(ngrid,nlay),          &! Memory of H2O mass integred into CO2 crystal
    193     mem_Nccn_co2(ngrid,nlay),          &! Memory of CCN number of H2O and dust used by CO2
    194196    n_aer(nbinco2_cld),                &! Radius used by the microphysical scheme (m)
    195197    m_aer(nbinco2_cld),                &! number concentration V-1 of particle/each size bin
    196198    n_aer_h2oice(nbinco2_cld),         &! mass mixing ratio of particle/each size bin
    197199    m_aer_h2oice(nbinco2_cld),         &! Same - for CO2 nucleation
    198     rad_h2oice(nbinco2_cld),           &! Same - for CO2 nucleation
    199200    Ic_rice,                           &! Mass transfer rate CO2 ice crystal
    200201    ratioh2o_ccn,                      &! 1./(zq(ig,l,igcm_h2o_ice)  + zq(ig,l,igcm_ccn_mass)*tauscaling(ig))
     
    374375          end do
    375376
    376           ! Ajout meteor_ccn particles aux particules de poussière background
    377           if (meteo_flux) then
    378             do i = 1, nbinco2_cld
    379               n_aer(i) = n_aer(i) + meteor_ccn(ig,l,i)
    380 
    381               m_aer(i) = m_aer(i) + (4./3.) * pi * rho_dust *meteor_ccn(ig,l,i) * rad_cldco2(i)**3
    382              end do
    383           end if
    384 
    385           ! Same but with h2o particles as CCN only if co2useh2o = .true.
    386           n_aer_h2oice(:)=0.
    387           m_aer_h2oice(:)=0.
    388 
    389           if (co2useh2o) then
    390             call updaterice_micro(zq(ig,l,igcm_h2o_ice), zq(ig,l,igcm_ccn_mass), zq(ig,l,igcm_ccn_number), &
    391                                   tauscaling(ig), rice(ig,l), rhocloud(ig,l))
    392 
    393             Mo = zq(ig,l,igcm_h2o_ice) + zq(ig,l,igcm_ccn_mass) * tauscaling(ig) + threshold
    394 
    395             ! Total mass of H20 crystals,CCN included
    396             No = zq(ig,l,igcm_ccn_number) * tauscaling(ig) + threshold
    397 
    398             Rn = -log(rice(ig,l))
    399 
    400             Rm = Rn - 3. * sigma_ice * sigma_ice
    401 
    402             n_derf = derf( (rb_cldco2(1)+Rn) *dev3)
    403             m_derf = derf( (rb_cldco2(1)+Rm) *dev3)
    404 
    405             do i = 1, nbinco2_cld
    406               n_aer_h2oice(i) = -0.5 * No * n_derf
    407               m_aer_h2oice(i) = -0.5 * Mo * m_derf
    408 
    409               n_derf = derf( (rb_cldco2(i+1)+Rn) *dev3)
    410               m_derf = derf( (rb_cldco2(i+1)+Rm) *dev3)
    411 
    412               n_aer_h2oice(i) = n_aer_h2oice(i) + 0.5 * No * n_derf
    413               m_aer_h2oice(i) = m_aer_h2oice(i) + 0.5 * Mo * m_derf
    414 
    415               rad_h2oice(i) = rad_cldco2(i)
    416             end do
    417           end if
    418 
    419377          ! Call to nucleation routine
    420           call nucleaCO2(dble(pco2), zt(ig,l), dble(satu), n_aer, rate, n_aer_h2oice, rad_h2oice, rateh2o, vo2co2)
    421 
     378          call nucleaco2(dble(pco2), zt(ig,l), dble(satu), n_aer, rate, vo2co2, mtetaco2)
    422379          dN = 0.
    423380          dM = 0.
    424           dNh2o = 0.
    425           dMh2o = 0.
    426381
    427382          do i = 1, nbinco2_cld
     
    431386          end do
    432387
    433           if (co2useh2o) then
     388          ! Now increment CCN tracers and update dust tracers
     389          dNN = min(dN,zq(ig,l,igcm_dust_number)) ! dNN est devenu DN
     390          dMM = min(dM,zq(ig,l,igcm_dust_mass))  ! idem dans le min
     391
     392          zq(ig,l,igcm_ccnco2_mass) = zq(ig,l,igcm_ccnco2_mass) + dMM /tauscaling(ig)
     393
     394          zq(ig,l,igcm_ccnco2_number) = zq(ig,l,igcm_ccnco2_number) + dNN /tauscaling(ig)
     395
     396          zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) - dMM /tauscaling(ig)
     397
     398          zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) - dNN /tauscaling(ig)
     399
     400          ! Ajout meteor_ccn particles aux particules de poussière background
     401          if (meteo_flux) then
     402            do i = 1, nbinco2_cld
     403              n_aer(i) = n_aer(i) + meteor_ccn(ig,l,i)
     404
     405              m_aer(i) = m_aer(i) + (4./3.) * pi * rho_dust * meteor_ccn(ig,l,i) * rad_cldco2(i)**3
     406             end do
     407          end if
     408        end if ! of if No > 1e-30
     409
     410        ! Same but with h2o particles as CCN only if co2useh2o = .true.
     411        if (co2useh2o) then
     412          call updaterice_micro(zq(ig,l,igcm_h2o_ice), zq(ig,l,igcm_ccn_mass), zq(ig,l,igcm_ccn_number), &
     413                                tauscaling(ig), rice(ig,l), rhocloud(ig,l))
     414
     415          ! Total mass of H20 crystals,CCN included
     416          Mo = zq(ig,l,igcm_h2o_ice) + zq(ig,l,igcm_ccn_mass) * tauscaling(ig) + threshold
     417
     418          No = zq(ig,l,igcm_ccn_number) * tauscaling(ig) + threshold
     419          if (No > threshold) then
     420            Rn = -log(rice(ig,l))
     421
     422            Rm = Rn - 3. * sigma_ice * sigma_ice
     423
     424            n_derf = derf( (rb_cldco2(1)+Rn) *dev3)
     425            m_derf = derf( (rb_cldco2(1)+Rm) *dev3)
     426
     427            n_aer_h2oice(:)=0.
     428            m_aer_h2oice(:)=0.
     429            do i = 1, nbinco2_cld
     430              n_aer_h2oice(i) = -0.5 * No * n_derf
     431              m_aer_h2oice(i) = -0.5 * Mo * m_derf
     432
     433              n_derf = derf( (rb_cldco2(i+1)+Rn) *dev3)
     434              m_derf = derf( (rb_cldco2(i+1)+Rm) *dev3)
     435
     436              n_aer_h2oice(i) = n_aer_h2oice(i) + 0.5 * No * n_derf
     437              m_aer_h2oice(i) = m_aer_h2oice(i) + 0.5 * Mo * m_derf
     438            end do
     439
     440            call nucleaco2(dble(pco2), zt(ig,l), dble(satu), n_aer_h2oice, rateh2o, vo2co2, mteta)
     441            dNh2o = 0.
     442            dMh2o = 0.
     443
    434444            do i = 1, nbinco2_cld
    435445              Probah2o = 1.0 - exp(-1.*microtimestep*rateh2o(i))
     
    437447              dMh2o = dMh2o + m_aer_h2oice(i) * Probah2o
    438448            end do
    439           end if
    440 
    441           ! Now increment CCN tracers and update dust tracers
    442           dNN = min(dN,zq(ig,l,igcm_dust_number)) ! dNN est devenu DN
    443           dMM = min(dM,zq(ig,l,igcm_dust_mass))  ! idem dans le min
    444 
    445           zq(ig,l,igcm_ccnco2_mass) = zq(ig,l,igcm_ccnco2_mass) + dMM /tauscaling(ig)
    446 
    447           zq(ig,l,igcm_ccnco2_number) = zq(ig,l,igcm_ccnco2_number) + dNN /tauscaling(ig)
    448 
    449           zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) - dMM /tauscaling(ig)
    450 
    451           zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) - dNN /tauscaling(ig)
    452 
    453           ! Update CCN for CO2 nucleating on H2O CCN : Warning: must keep memory of it
    454           if (co2useh2o) then
     449
     450            ! Update CCN for CO2 nucleating on H2O CCN : Warning: must keep memory of it
    455451            dNNh2o = dNh2o/tauscaling(ig)
    456452            dNNh2o = min(dNNh2o,zq(ig,l,igcm_ccn_number))
     
    465461            dMh2o_ice = min(dMh2o_ice,zq(ig,l,igcm_h2o_ice))
    466462
    467             zq(ig,l,igcm_ccnco2_mass) = zq(ig,l,igcm_ccnco2_mass)  + dMh2o_ice + dMh2o_ccn
    468 
    469             zq(ig,l,igcm_ccnco2_number) =  zq(ig,l,igcm_ccnco2_number) + dNNh2o
    470 
    471             zq(ig,l,igcm_ccn_number) = zq(ig,l,igcm_ccn_number)  - dNNh2o
    472 
     463            zq(ig,l,igcm_ccnco2_h2o_mass_ice) = zq(ig,l,igcm_ccnco2_h2o_mass_ice)  + dMh2o_ice
     464            zq(ig,l,igcm_ccnco2_h2o_mass_ccn) = zq(ig,l,igcm_ccnco2_h2o_mass_ccn)  + dMh2o_ccn
     465            zq(ig,l,igcm_ccnco2_h2o_number) = zq(ig,l,igcm_ccnco2_h2o_number) + dNNh2o
     466
     467            zq(ig,l,igcm_ccn_number) =  zq(ig,l,igcm_ccn_number)  - dNNh2o
    473468            zq(ig,l,igcm_h2o_ice) = zq(ig,l,igcm_h2o_ice)  - dMh2o_ice
    474 
    475469            zq(ig,l,igcm_ccn_mass) = zq(ig,l,igcm_ccn_mass) - dMh2o_ccn
    476470
    477             mem_Mh2o_co2(ig,l) = mem_Mh2o_co2(ig,l) + dMh2o_ice
    478             mem_Mccn_co2(ig,l) = mem_Mccn_co2(ig,l) + dMh2o_ccn
    479             mem_Nccn_co2(ig,l) = mem_Nccn_co2(ig,l) + dNNh2o
    480           end if ! of if co2useh2o
    481         end if ! of if No > 1e-30
     471                  zq(ig,l,igcm_ccnco2_mass) = zq(ig,l,igcm_ccnco2_mass)  + dMh2o_ice + dMh2o_ccn
     472                  zq(ig,l,igcm_ccnco2_number) =  zq(ig,l,igcm_ccnco2_number) + dNNh2o
     473          end if
     474        end if ! of if co2useh2o
    482475      end if ! of is satu > 1
    483476!----------------------------------------------------------------------------------------------------------------------!
     
    489482!----------------------------------------------------------------------------------------------------------------------!
    490483      ! we trigger crystal growth
    491       if (zq(ig,l,igcm_ccnco2_number) * tauscaling(ig) + threshold >= 1) then
    492 
    493         call updaterice_microco2(dble(zq(ig,l,igcm_co2_ice)), dble(zq(ig,l,igcm_ccnco2_mass)), &
    494                                  dble(zq(ig,l,igcm_ccnco2_number)), zt(ig,l), tauscaling(ig), riceco2(ig,l), &
    495                                  rhocloudco2(ig,l))
     484      if ((zq(ig,l,igcm_ccnco2_number)) * tauscaling(ig) + threshold >= 1) then
     485        Nccnco2 = dble(zq(ig,l,igcm_ccnco2_number))
     486        Qccnco2 = dble(zq(ig,l,igcm_ccnco2_mass))
     487        Nccnco2_h2o = 0.
     488        Qccnco2_h2o = 0.
     489
     490        if (co2useh2o) then
     491          Nccnco2_h2o = zq(ig,l,igcm_ccnco2_h2o_number)
     492          Qccnco2_h2o = zq(ig,l,igcm_ccnco2_h2o_mass_ice) + zq(ig,l,igcm_ccnco2_h2o_mass_ccn)
     493          Nccnco2 = Nccnco2 - Nccnco2_h2o
     494          Qccnco2 = Qccnco2 - Qccnco2_h2o
     495        end if
     496
     497        call updaterice_microco2(dble(zq(ig,l,igcm_co2_ice)), dble(Qccnco2), dble(Nccnco2), dble(Qccnco2_h2o), &
     498                                 dble(Nccnco2_h2o), zt(ig,l), tauscaling(ig), riceco2(ig,l), rhocloudco2(ig,l))
    496499        Ic_rice = 0.
    497500
     
    532535      ! On sublime tout
    533536      if ((zq(ig,l,igcm_co2_ice) <= threshold).or.(zq(ig,l,igcm_ccnco2_number) * tauscaling(ig) < 1.)) then
    534 
    535         if (co2useh2o) then
    536 
    537           if (mem_Mccn_co2(ig,l) > 0) then
    538             zq(ig,l,igcm_ccn_mass) = zq(ig,l,igcm_ccn_mass) + mem_Mccn_co2(ig,l)
     537          zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) + zq(ig,l,igcm_ccnco2_mass)
     538          zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) + zq(ig,l,igcm_ccnco2_number)
     539          zq(ig,l,igcm_ccnco2_mass) = 0.
     540          zq(ig,l,igcm_ccnco2_number) = 0.
     541          if (co2useh2o) then
     542            zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) - zq(ig,l,igcm_ccnco2_h2o_mass_ccn) - &
     543                                      zq(ig,l,igcm_ccnco2_h2o_mass_ice)
     544            zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) - zq(ig,l,igcm_ccnco2_h2o_number)
     545
     546            zq(ig,l,igcm_ccn_mass) = zq(ig,l,igcm_ccn_mass) + zq(ig,l,igcm_ccnco2_h2o_mass_ccn)
     547            zq(ig,l,igcm_h2o_ice) = zq(ig,l,igcm_h2o_ice) + zq(ig,l,igcm_ccnco2_h2o_mass_ice)
     548            zq(ig,l,igcm_ccn_number) = zq(ig,l,igcm_ccn_number) + zq(ig,l,igcm_ccnco2_h2o_number)
     549            zq(ig,l,igcm_ccnco2_h2o_number) = 0.
     550            zq(ig,l,igcm_ccnco2_h2o_mass_ccn) = 0.
     551            zq(ig,l,igcm_ccnco2_h2o_mass_ice) = 0.
    539552          end if
    540 
    541           if (mem_Mh2o_co2(ig,l) > 0) then
    542             zq(ig,l,igcm_h2o_ice) = zq(ig,l,igcm_h2o_ice) + mem_Mh2o_co2(ig,l)
    543           end if
    544 
    545           if (mem_Nccn_co2(ig,l) > 0) then
    546             zq(ig,l,igcm_ccn_number) = zq(ig,l,igcm_ccn_number) + mem_Nccn_co2(ig,l)
    547           end if
    548 
    549         end if
    550 
    551         zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) + zq(ig,l,igcm_ccnco2_mass) - ( mem_Mh2o_co2(ig,l) + &
    552                                      mem_Mccn_co2(ig,l) )
    553 
    554         zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) + zq(ig,l,igcm_ccnco2_number)  - mem_Nccn_co2(ig,l)
    555 
    556         zq(ig,l,igcm_co2) = zq(ig,l,igcm_co2)  + zq(ig,l,igcm_co2_ice)
    557 
    558         zq(ig,l,igcm_co2_ice) = 0.
    559         zq(ig,l,igcm_ccnco2_mass) = 0.
    560         zq(ig,l,igcm_ccnco2_number) = 0.
    561         mem_Nccn_co2(ig,l) = 0.
    562         mem_Mh2o_co2(ig,l) = 0.
    563         mem_Mccn_co2(ig,l) = 0.
    564         riceco2(ig,l) = 0.
     553          zq(ig,l,igcm_co2) = zq(ig,l,igcm_co2) + zq(ig,l,igcm_co2_ice)
     554          zq(ig,l,igcm_co2_ice) = 0.
     555          riceco2(ig,l) = 0.
    565556      end if !of if co2_ice < threshold or zq(ccnco2_number) < 1
    566557    end do ! of ig loop
     
    587578
    588579    subpdqcloudco2(:,:,igcm_ccn_number) = ( zq(:,:,igcm_ccn_number) - zq0(:,:,igcm_ccn_number) ) / microtimestep
     580
     581    subpdqcloudco2(:,:,igcm_ccnco2_h2o_mass_ice) = (zq(:,:,igcm_ccnco2_h2o_mass_ice)-zq0(:,:,igcm_ccnco2_h2o_mass_ice)&
     582                                                   )/microtimestep
     583
     584    subpdqcloudco2(:,:,igcm_ccnco2_h2o_mass_ccn) = (zq(:,:,igcm_ccnco2_h2o_mass_ccn)-zq0(:,:,igcm_ccnco2_h2o_mass_ccn)&
     585                                                   )/microtimestep
     586
     587    subpdqcloudco2(:,:,igcm_ccnco2_h2o_number) = ( zq(:,:,igcm_ccnco2_h2o_number) - zq0(:,:,igcm_ccnco2_h2o_number) &
     588                                                 )/microtimestep
    589589  end if
    590590!======================================================================================================================!
  • trunk/LMDZ.MARS/libf/phymars/initracer.F

    r2494 r2562  
    6464      igcm_ccnco2_mass=0
    6565      igcm_ccnco2_number=0
     66      igcm_ccnco2_h2o_mass_ice=0
     67      igcm_ccnco2_h2o_mass_ccn=0
     68      igcm_ccnco2_h2o_number=0
    6669      igcm_dust_mass=0
    6770      igcm_dust_number=0
     
    425428              count=count+1
    426429           endif
     430           if (co2useh2o) then
     431           if (noms(iq).eq."ccnco2_h2o_number") then
     432              igcm_ccnco2_h2o_number=iq
     433              count=count+1
     434           endif
     435           if (noms(iq).eq."ccnco2_h2o_mass_ice") then
     436              igcm_ccnco2_h2o_mass_ice=iq
     437              count=count+1
     438           endif
     439           if (noms(iq).eq."ccnco2_h2o_mass_ccn") then
     440              igcm_ccnco2_h2o_mass_ccn=iq
     441              count=count+1
     442           endif
     443           end if
    427444        endif
    428445      enddo                     ! of do iq=1,nq
  • trunk/LMDZ.MARS/libf/phymars/phyetat0_mod.F90

    r2545 r2562  
    88subroutine phyetat0 (fichnom,tab0,Lmodif,nsoil,ngrid,nlay,nq, &
    99                     day_ini,time0,tsurf,tsoil,albedo,emis,q2,qsurf,co2ice, &
    10                      tauscaling,totcloudfrac,wstar,mem_Mccn_co2,mem_Nccn_co2,&
    11                      mem_Mh2o_co2,watercap)
     10                     tauscaling,totcloudfrac,wstar,watercap)
    1211
    1312  use tracer_mod, only: noms ! tracer names
     
    2827!======================================================================
    2928! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
    30 !  Adaptation à Mars : Yann Wanherdrick
     29!  Adaptation Mars : Yann Wanherdrick
    3130! Objet: Lecture de l etat initial pour la physique
    3231! Modifs: Aug.2010 EM : use NetCDF90 to load variables (enables using
     
    6665  real,intent(out) :: totcloudfrac(ngrid) ! total cloud fraction
    6766  real,intent(out) :: wstar(ngrid) ! Max vertical velocity in thermals (m/s)
    68   real,intent(out) :: mem_Mccn_co2(ngrid,nlay) ! Memory of CCN mass of H2O and dust used by CO2
    69   real,intent(out) :: mem_Nccn_co2(ngrid,nlay) ! Memory of CCN number of H2O and dust used by CO2
    70   real,intent(out) :: mem_Mh2o_co2(ngrid,nlay) ! Memory of H2O mass integred into CO2 crystal
    7167  real,intent(out) :: watercap(ngrid) ! h2o_ice_cover
    7268!======================================================================
     
    363359            minval(co2ice), maxval(co2ice)
    364360
    365 ! Memory of the origin of the co2 particles
    366 if (startphy_file) then
    367    call get_field("mem_Mccn_co2",mem_Mccn_co2,found,indextime)
    368    if (.not.found) then
    369      write(*,*) "phyetat0: <mem_Mccn_co2> not in file"
    370      mem_Mccn_co2(:,:)=0
    371    endif
    372 else
    373    mem_Mccn_co2(:,:)=0
    374 endif !if (startphy_file)
    375 write(*,*) "phyetat0: Memory of CCN mass of H2O and dust used by CO2"
    376 write(*,*) " <mem_Mccn_co2> range:", &
    377              minval(mem_Mccn_co2), maxval(mem_Mccn_co2)
    378 
    379 if (startphy_file) then
    380    call get_field("mem_Nccn_co2",mem_Nccn_co2,found,indextime)
    381    if (.not.found) then
    382      write(*,*) "phyetat0: <mem_Nccn_co2> not in file"
    383      mem_Nccn_co2(:,:)=0
    384    endif
    385 else
    386   mem_Nccn_co2(:,:)=0
    387 endif ! if (startphy_file)
    388 write(*,*) "phyetat0: Memory of CCN number of H2O and dust used by CO2"
    389 write(*,*) " <mem_Nccn_co2> range:", &
    390              minval(mem_Nccn_co2), maxval(mem_Nccn_co2)
    391 
    392 if (startphy_file) then
    393    call get_field("mem_Mh2o_co2",mem_Mh2o_co2,found,indextime)
    394    if (.not.found) then
    395      write(*,*) "phyetat0: <mem_Mh2o_co2> not in file"
    396      mem_Mh2o_co2(:,:)=0
    397    endif
    398 else
    399    mem_Mh2o_co2(:,:)=0
    400 endif ! if (startphy_file)
    401 write(*,*) "phyetat0: Memory of H2O mass integred into CO2 crystal"
    402 write(*,*) " <mem_Mh2o_co2> range:", &
    403              minval(mem_Mh2o_co2), maxval(mem_Mh2o_co2)
    404 
    405361! Dust conversion factor
    406362if (startphy_file) then
  • trunk/LMDZ.MARS/libf/phymars/phyredem.F90

    r2494 r2562  
    150150                    phystep,time,tsurf,tsoil,co2ice,albedo,emis,q2,qsurf,&
    151151                    tauscaling,totcloudfrac,wstar, &
    152                     mem_Mccn_co2,mem_Nccn_co2,mem_Mh2o_co2, watercap)
     152                    watercap)
    153153  ! write time-dependent variable to restart file
    154154  use iostart, only : open_restartphy, close_restartphy, &
     
    181181  real,intent(in) :: totcloudfrac(ngrid)
    182182  real,intent(in) :: wstar(ngrid)
    183   real,intent(in) :: mem_Mccn_co2(ngrid,nlay) ! CCN mass of H2O and dust used by CO2
    184   real,intent(in) :: mem_Nccn_co2(ngrid,nlay) ! CCN number of H2O and dust used by CO2
    185   real,intent(in) :: mem_Mh2o_co2(ngrid,nlay) ! H2O mass integred into CO2 crystal
    186183  real,intent(in) :: watercap(ngrid)
    187184 
     
    311308    enddo
    312309  endif
    313   ! Memory of the origin of the co2 particles
    314   if (co2useh2o) then
    315      call put_field("mem_Mccn_co2","CCN mass of H2O and dust used by CO2",mem_Mccn_co2,time)
    316      call put_field("mem_Nccn_co2","CCN number of H2O and dust used by CO2",mem_Nccn_co2,time)
    317      call put_field("mem_Mh2o_co2","H2O mass integred into CO2 crystal",mem_Mh2o_co2,time)
    318   endif
    319  
     310
    320311  ! Non-orographic gavity waves
    321312  if (calllott_nonoro) then
  • trunk/LMDZ.MARS/libf/phymars/phys_state_var_init_mod.F90

    r2511 r2562  
    4848      use tracer_mod, only: ini_tracer_mod,end_tracer_mod
    4949      use time_phylmdz_mod, only: init_time
    50       use co2cloud_mod, only: ini_co2cloud,end_co2cloud
    5150      use compute_dtau_mod, only: ini_compute_dtau_mod, &
    5251                                  end_compute_dtau_mod
     
    129128      call end_turb_mod
    130129      call ini_turb_mod(ngrid,nlayer)
    131      
    132       ! allocate arrays in "co2cloud" :
    133       ! Memory of the origin of the co2 particles     
    134       call end_co2cloud
    135       call ini_co2cloud(ngrid,nlayer)
    136      
     130
    137131      ! allocate arrays in "compute_dtau_mod":
    138132      call end_compute_dtau_mod
  • trunk/LMDZ.MARS/libf/phymars/physiq_mod.F

    r2561 r2562  
    1919      use co2condens_mod, only: co2condens
    2020      use co2condens_mod4micro, only: co2condens4micro
    21       use co2cloud_mod, only: co2cloud, mem_Mccn_co2, mem_Mh2o_co2,
    22      &                        mem_Nccn_co2
     21      use co2cloud_mod, only: co2cloud
    2322      use callradite_mod, only: callradite
    2423      use callsedim_mod, only: callsedim
     
    3130     &                      igcm_ccn_mass, igcm_ccn_number,
    3231     &                      igcm_ccnco2_mass, igcm_ccnco2_number,
     32     &                      igcm_ccnco2_h2o_mass_ice,
     33     &                      igcm_ccnco2_h2o_mass_ccn,
     34     &                      igcm_ccnco2_h2o_number,
    3335     &                      rho_ice_co2,nuiceco2_sed,nuiceco2_ref,
    3436     &                      igcm_dust_mass, igcm_dust_number, igcm_h2o2,
     
    265267      DOUBLE PRECISION riceco2(ngrid,nlayer)   ! co2 ice geometric mean radius (m)
    266268      real zdqssed_co2(ngrid)  ! CO2 flux at the surface  (kg.m-2.s-1)
     269      real zdqssed_ccn(ngrid,nq)  ! CCN flux at the surface  (kg.m-2.s-1)
    267270      real zcondicea_co2microp(ngrid,nlayer)
    268271c     Variables used by the photochemistry
     
    551554     &         tsurf,tsoil,albedo,emis,
    552555     &         q2,qsurf,co2ice,tauscaling,totcloudfrac,wstar,
    553      &         mem_Mccn_co2,mem_Nccn_co2,
    554      &         mem_Mh2o_co2,watercap)
     556     &         watercap)
    555557
    556558#else
     
    573575      !!! a couple initializations (dummy for mesoscale) done in phyetat0
    574576      !!! --- maybe this should be done in update_inputs_physiq_mod
    575       mem_Mccn_co2(:,:)=0.0
    576       mem_Nccn_co2(:,:)=0.0
    577       mem_Mh2o_co2(:,:)=0.0
     577
    578578      tauscaling(:)=1.0 !! probably important
    579579      totcloudfrac(:)=1.0
     
    16531653c               imicroco2=50     micro-timestep is 1/50 of physical timestep
    16541654        zdqssed_co2(:) = 0.
     1655        zdqssed_ccn(:,:) = 0.
    16551656
    16561657         IF (co2clouds) THEN
     
    16601661     &           nq,tau,tauscaling,rdust,rice,riceco2,nuice,
    16611662     &           rhocloud, rsedcloudco2,rhocloudco2,zzlev,zdqssed_co2,
    1662      &           pdu,pu,zcondicea_co2microp, co2ice)
    1663 
     1663     &           zdqssed_ccn,pdu,pu,zcondicea_co2microp, co2ice)
     1664
     1665          DO iq=1, nq
     1666            DO ig=1,ngrid
     1667              dqsurf(ig,iq)=dqsurf(ig,iq)+zdqssed_ccn(ig,iq)
     1668            ENDDO  ! (ig)
     1669           ENDDO    ! (iq)
    16641670c Temperature variation due to latent heat release
    1665                pdt(1:ngrid,1:nlayer) = 
     1671               pdt(1:ngrid,1:nlayer) =
    16661672     &              pdt(1:ngrid,1:nlayer) +
    16671673     &              zdtcloudco2(1:ngrid,1:nlayer)
    1668            
     1674
    16691675
    16701676! increment dust and ccn masses and numbers
     
    17011707     &               pdq(1:ngrid,1:nlayer,igcm_ccn_number) +
    17021708     &               zdqcloudco2(1:ngrid,1:nlayer,igcm_ccn_number)
     1709
     1710               pdq(:,:,igcm_ccnco2_h2o_mass_ice) =
     1711     &                pdq(:,:,igcm_ccnco2_h2o_mass_ice) +
     1712     &                zdqcloudco2(:,:,igcm_ccnco2_h2o_mass_ice)
     1713
     1714               pdq(:,:,igcm_ccnco2_h2o_mass_ccn) =
     1715     &                pdq(:,:,igcm_ccnco2_h2o_mass_ccn) +
     1716     &                zdqcloudco2(:,:,igcm_ccnco2_h2o_mass_ccn)
     1717
     1718               pdq(:,:,igcm_ccnco2_h2o_number) =
     1719     &                   pdq(:,:,igcm_ccnco2_h2o_number) +
     1720     &                   zdqcloudco2(:,:,igcm_ccnco2_h2o_number)
    17031721
    17041722c     Negative values?
     
    17181736     &              - pq(:,:,igcm_ccn_number)/ptimestep + 1.e-30
    17191737                end where
     1738             where (pq(:,:,igcm_ccnco2_h2o_mass_ice) +
     1739     &              pq(:,:,igcm_ccnco2_h2o_mass_ccn) +
     1740     &              (pdq(:,:,igcm_ccnco2_h2o_mass_ice) +
     1741     &               pdq(:,:,igcm_ccnco2_h2o_mass_ccn)
     1742     &               )*ptimestep < 0.)
     1743               pdq(:,:,igcm_ccnco2_h2o_mass_ice) =
     1744     &            - pq(:,:,igcm_ccnco2_h2o_mass_ice)
     1745     &               /ptimestep + 1.e-30
     1746               pdq(:,:,igcm_ccnco2_h2o_mass_ccn) =
     1747     &            - pq(:,:,igcm_ccnco2_h2o_mass_ccn)
     1748     &               /ptimestep + 1.e-30
     1749               pdq(:,:,igcm_ccnco2_h2o_number) =
     1750     &            - pq(:,:,igcm_ccnco2_h2o_number)
     1751     &                /ptimestep + 1.e-30
     1752             end where
     1753
     1754             where (pq(:,:,igcm_ccnco2_h2o_number) +
     1755     &              (pdq(:,:,igcm_ccnco2_h2o_number)
     1756     &               )*ptimestep < 0.)
     1757               pdq(:,:,igcm_ccnco2_h2o_mass_ice) =
     1758     &            - pq(:,:,igcm_ccnco2_h2o_mass_ice)
     1759     &               /ptimestep + 1.e-30
     1760               pdq(:,:,igcm_ccnco2_h2o_mass_ccn) =
     1761     &            - pq(:,:,igcm_ccnco2_h2o_mass_ccn)
     1762     &               /ptimestep + 1.e-30
     1763               pdq(:,:,igcm_ccnco2_h2o_number) =
     1764     &            - pq(:,:,igcm_ccnco2_h2o_number)
     1765     &                /ptimestep + 1.e-30
     1766             end where
    17201767             endif ! of if (co2useh2o)
    17211768c     Negative values?
     
    19602007     $                  zdtc,zdtsurfc,pdpsrf,zduc,zdvc,zdqc,
    19612008     $                  fluxsurf_sw,zls,
    1962      $                  zdqssed_co2,zcondicea_co2microp)
     2009     $                  zdqssed_co2,zcondicea_co2microp
     2010     &                  )
    19632011         ! no scavenging yet
    19642012         zdqsc(:,:) = 0.
     
    23662414     .                tsurf,tsoil,co2ice,albedo,emis,
    23672415     .                q2,qsurf,tauscaling,totcloudfrac,wstar,
    2368      .                mem_Mccn_co2,mem_Nccn_co2,mem_Mh2o_co2,watercap)
     2416     .                watercap)
    23692417         
    23702418         ENDIF
  • trunk/LMDZ.MARS/libf/phymars/tracer_mod.F90

    r2461 r2562  
    4949      integer,save :: igcm_ccnco2_mass   ! CCN (dust and/or water ice) for CO2 mass mixing ratio
    5050      integer,save :: igcm_ccnco2_number ! CCN (dust and/or water ice) for CO2 number mixing ratio
     51      integer,save :: igcm_ccnco2_h2o_mass_ice   ! CCN (dust and/or water ice) for CO2 mass mixing ratio
     52      integer,save :: igcm_ccnco2_h2o_mass_ccn   ! CCN (dust and/or water ice) for CO2 mass mixing ratio
     53      integer,save :: igcm_ccnco2_h2o_number ! CCN (dust and/or water ice) for CO2 number mixing ratio
    5154
    5255      ! water
  • trunk/LMDZ.MARS/libf/phymars/updaterad.F90

    r2494 r2562  
    100100!============================================================================
    101101!============================================================================
    102 subroutine updaterice_microco2(qice, qccn, nccn, temperature, coeff, rice, rhocloudco2)
    103 use tracer_mod, only: rho_dust
     102subroutine updaterice_microco2(qice, qccn, nccn, qccn_h2o, nccn_h2o, temperature, coeff, rice, rhocloudco2)
     103use tracer_mod, only: rho_dust, rho_ice
    104104use comcstfi_h, only: pi
    105105use density_co2_ice_mod, only: density_co2_ice
     
    108108!CO2 clouds parameter update by CL and JA 09/16
    109109
    110 DOUBLE PRECISION, intent(in)  :: qice,qccn,nccn
     110DOUBLE PRECISION, intent(in)  :: qice,qccn,nccn, qccn_h2o, nccn_h2o
    111111real, intent(in)  :: coeff         ! this coeff is tauscaling if microphy = T (possibly ccn_factor^-1 otherwise)
    112112real, intent(in)  :: temperature ! temperature effective for density co2_ice computation
    113113real, intent(out) :: rhocloudco2 ! rhocloud is needed for sedimentation and is also a good diagnostic variable
    114114double precision, intent(out) :: rice
    115 real nccn_true,qccn_true ! nombre et masse de CCN
     115real nccn_true,qccn_true, qccn_h2o_true, nccn_h2o_true ! nombre et masse de CCN
    116116double precision :: rho_ice_co2T ! density co2_ice Temperature-dependent
    117117
     
    119119qccn_true = max(qccn * coeff, 1.e-30)
    120120
     121nccn_h2o_true = max(nccn_h2o, 1.e-30)
     122qccn_h2o_true = max(qccn_h2o, 1.e-30)
     123
    121124call density_co2_ice(dble(temperature), rho_ice_co2T)
    122125
    123 rhocloudco2 = (qice * rho_ice_co2T + qccn_true*rho_dust) / (qice + qccn_true)
     126rhocloudco2 = (qice * rho_ice_co2T + qccn_true*rho_dust + qccn_h2o_true*rho_ice) / (qice + qccn_true + qccn_h2o_true)
    124127
    125128rhocloudco2 = min(max(rhocloudco2,rho_ice_co2T), rho_dust)
    126129
    127 rice = (qice + qccn_true) * 0.75 / pi / rhocloudco2 / nccn_true
    128 
    129 rhocloudco2 = (qice * rho_ice_co2T + qccn_true*rho_dust) / (qice + qccn_true)
    130 
    131 if (rice .le. r3iceco2min) then !r3icemin radius power 3 ?
     130rice = (qice + qccn_true + qccn_h2o_true) * 0.75 / pi / rhocloudco2 / (nccn_true + nccn_h2o_true)
     131
     132rhocloudco2 = (qice * rho_ice_co2T + qccn_true*rho_dust + qccn_h2o_true*rho_ice) / (qice + qccn_true + qccn_h2o_true)
     133
     134if (rice <= r3iceco2min) then !r3icemin radius power 3 ?
    132135  rice = riceco2min
    133 else if (rice .ge. r3iceco2max) then !r3icemin radius power 3 ?
     136else if (rice >= r3iceco2max) then !r3icemin radius power 3 ?
    134137  rice = riceco2max
    135138else
  • trunk/LMDZ.MARS/libf/phymars/updatereffrad_mod.F

    r2494 r2562  
    1515     &                       igcm_co2_ice, nuiceco2_ref,
    1616     &                       igcm_ccnco2_number, igcm_ccnco2_mass,
     17     &                       igcm_ccnco2_h2o_number,
     18     &                       igcm_ccnco2_h2o_mass_ice,
     19     &                       igcm_ccnco2_h2o_mass_ccn,
    1720     &                       igcm_ccn_number, nuice_ref, varian,
    1821     &                       ref_r0, igcm_dust_submicron,
     
    9699
    97100      LOGICAL,SAVE :: firstcall=.true.
    98 
     101      REAL Nccnco2, Qccnco2
     102      REAL Nccnco2_h2o, Qccnco2_h2o
    99103      REAL CBRT
    100104      EXTERNAL CBRT
     
    191195          DO l=1,nlayer
    192196            DO ig=1,ngrid
     197              Nccnco2 = pq(ig,l,igcm_ccnco2_number)
     198              Qccnco2 = pq(ig,l,igcm_ccnco2_mass)
     199              Nccnco2_h2o = 0.
     200              Qccnco2_h2o = 0.
     201              if (co2useh2o) then
     202                Nccnco2_h2o = pq(ig,l,igcm_ccnco2_h2o_number)
     203                Qccnco2_h2o = pq(ig,l,igcm_ccnco2_h2o_mass_ice)
     204     &                        + pq(ig,l,igcm_ccnco2_h2o_mass_ccn)
     205                Nccnco2 = Nccnco2 - Nccnco2_h2o
     206                Qccnco2 = Qccnco2 - Qccnco2_h2o
     207              end if
     208
    193209              call updaterice_microco2(dble(pq(ig,l,igcm_co2_ice)),
    194      &                              dble(pq(ig,l,igcm_ccnco2_mass)),
    195      &                              dble(pq(ig,l,igcm_ccnco2_number)),
     210     &                              dble(Qccnco2), dble(Nccnco2),
     211     &                              dble(Qccnco2_h2o),
     212     &                              dble(Nccnco2_h2o),
    196213     &                              pt(ig,l),
    197214     &                              tauscaling(ig),riceco2(ig,l),
Note: See TracChangeset for help on using the changeset viewer.