Ignore:
Timestamp:
May 6, 2020, 4:46:33 PM (5 years ago)
Author:
lrossi
Message:

MARS GCM:
Implementation of HDO in the physics
New tracers hdo_vap and hdo_ice are added. Cf. traceur.def.isotopes in deftank for exemple of traceur.def.
All HDO related computations are activated by flag hdo=.true. in callphys.def. (see callphys.def.hdo in deftank for an example)
Additional option hdofrac (true by default) allows for turning on/off fractionation (for tests).
For now, only functional with simplified cloud scheme (so microphys=.false. and activice=.false. also recommended).
Initialisation of start files can be done with option 'inihdo' in newstart.
LR

File:
1 edited

Legend:

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

    r1996 r2312  
    55      USE updaterad
    66      USE watersat_mod, ONLY: watersat
    7       use tracer_mod, only: igcm_h2o_vap, igcm_h2o_ice
     7      use tracer_mod, only: igcm_h2o_vap, igcm_h2o_ice,
     8     &                      igcm_hdo_vap, igcm_hdo_ice
    89      USE comcstfi_h
    910      use dimradmars_mod, only: naerkind
     11
    1012      implicit none
    1113c------------------------------------------------------------------
     
    7779      REAL ccntyp(ngrid,nlay)
    7880                                      ! Typical dust number density (#/kg)
     81      REAL alpha_c(ngrid,nlay) !!MARGAUX: alpha_c as a spatial variable
     82
    7983c     CCN reduction factor
    8084c      REAL, PARAMETER :: ccn_factor = 4.5  !! comme TESTS_JB // 1. avant
    81      
    82 
     85      REAL DoH_vap(ngrid,nlay)
     86      REAL DoH_ice(ngrid,nlay)
    8387c-----------------------------------------------------------------------
    8488c    1. initialisation
     
    100104          zq(ig,l,igcm_h2o_ice)=max(zq(ig,l,igcm_h2o_ice),0.) ! FF 12/2004
    101105          zq0(ig,l,igcm_h2o_ice)=zq(ig,l,igcm_h2o_ice)
     106
     107          if (hdo) then
     108          zq(ig,l,igcm_hdo_vap)=
     109     &      pq(ig,l,igcm_hdo_vap)+pdq(ig,l,igcm_hdo_vap)*ptimestep
     110          zq(ig,l,igcm_hdo_vap)=max(zq(ig,l,igcm_hdo_vap),1e-30) ! FF 12/2004
     111          zq0(ig,l,igcm_hdo_vap)=zq(ig,l,igcm_hdo_vap)
     112
     113          zq(ig,l,igcm_hdo_ice)=
     114     &      pq(ig,l,igcm_hdo_ice)+pdq(ig,l,igcm_hdo_ice)*ptimestep
     115          zq(ig,l,igcm_hdo_ice)=max(zq(ig,l,igcm_hdo_ice),1e-30) ! FF 12/2004
     116          zq0(ig,l,igcm_hdo_ice)=zq(ig,l,igcm_hdo_ice)
     117
     118          endif !hdo
    102119        enddo
    103120      enddo
    104121
    105 
    106122      pdqcloud(1:ngrid,1:nlay,1:nq)=0
    107123      pdtcloud(1:ngrid,1:nlay)=0
    108124
     125      alpha_c(1:ngrid,1:nlay)=0.
     126
    109127c     ----------------------------------------------
    110 c
    111128c
    112129c     Rapport de melange a saturation dans la couche l : -------
     
    122139
    123140          if (zq(ig,l,igcm_h2o_vap).ge.zqsat(ig,l))then  !  Condensation
    124             dzq=zq(ig,l,igcm_h2o_vap)-zqsat(ig,l)               
     141            dzq=zq(ig,l,igcm_h2o_vap)-zqsat(ig,l)
     142
    125143          elseif(zq(ig,l,igcm_h2o_vap).lt.zqsat(ig,l))then  ! Sublimation
    126144            dzq=-min(zqsat(ig,l)-zq(ig,l,igcm_h2o_vap),
    127145     &               zq(ig,l,igcm_h2o_ice))
    128146          endif
    129 
     147           
    130148c         Water Mass change
    131149c         ~~~~~~~~~~~~~~~~~
    132150          zq(ig,l,igcm_h2o_ice)=zq(ig,l,igcm_h2o_ice)+dzq
    133151          zq(ig,l,igcm_h2o_vap)=zq(ig,l,igcm_h2o_vap)-dzq
    134          
    135 
     152       
    136153        enddo ! of do ig=1,ngrid
    137154      enddo ! of do l=1,nlay
     155
    138156
    139157c     Tendance finale
     
    145163          pdqcloud(ig,l,igcm_h2o_ice) =
    146164     &      (zq(ig,l,igcm_h2o_ice) - zq0(ig,l,igcm_h2o_ice))/ptimestep
     165
    147166          lw=(2834.3-0.28*(zt(ig,l)-To)-0.004*(zt(ig,l)-To)**2)*1.e+3
    148167          pdtcloud(ig,l)=-pdqcloud(ig,l,igcm_h2o_vap)*lw/cpp
    149         end do
    150       end do
     168
     169          if (hdo) then
     170            if (pdqcloud(ig,l,igcm_h2o_ice).gt.0.0) then !condens
     171
     172                if (hdofrac) then ! do we use fractionation?
     173                alpha_c(ig,l) = exp(16288./zt(ig,l)**2.-9.34d-2)
     174c               alpha_c(ig,l) = exp(13525./zt(ig,l)**2.-5.59d-2)  !Lamb
     175                else
     176                alpha_c(ig,l) = 1.d0
     177                endif
     178               
     179                if (zq0(ig,l,igcm_h2o_vap).gt.1.e-16) then
     180                  pdqcloud(ig,l,igcm_hdo_ice)=
     181     &              pdqcloud(ig,l,igcm_h2o_ice)*alpha_c(ig,l)*
     182     &         ( zq0(ig,l,igcm_hdo_vap)
     183     &                 /zq0(ig,l,igcm_h2o_vap) )
     184                else
     185                   pdqcloud(ig,l,igcm_hdo_ice)= 0.0
     186                endif
     187
     188                pdqcloud(ig,l,igcm_hdo_ice) =
     189     &            min(pdqcloud(ig,l,igcm_hdo_ice),
     190     &              zq0(ig,l,igcm_hdo_vap)/ptimestep)
     191
     192                pdqcloud(ig,l,igcm_hdo_vap)=
     193     &               -pdqcloud(ig,l,igcm_hdo_ice)       
     194
     195          else  ! sublimation
     196
     197             if (zq0(ig,l,igcm_h2o_ice).gt.1.e-16) then
     198                pdqcloud(ig,l,igcm_hdo_ice)=
     199     &               pdqcloud(ig,l,igcm_h2o_ice)*
     200     &      ( zq0(ig,l,igcm_hdo_ice)
     201     &              /zq0(ig,l,igcm_h2o_ice) )
     202             else
     203                pdqcloud(ig,l,igcm_hdo_ice)= 0.
     204             endif
     205
     206              pdqcloud(ig,l,igcm_hdo_ice) =
     207     &          max(pdqcloud(ig,l,igcm_hdo_ice),
     208     &            -zq0(ig,l,igcm_hdo_ice)/ptimestep)
     209
     210              pdqcloud(ig,l,igcm_hdo_vap)=
     211     &             -pdqcloud(ig,l,igcm_hdo_ice)       
     212
     213            endif ! condensation/sublimation
     214
     215          endif ! hdo
     216
     217        enddo ! of do ig=1,ngrid
     218      enddo ! of do l=1,nlay
    151219
    152220c     ice crystal radius
     
    158226      end do
    159227
     228c     if (hdo) then
     229c           CALL WRITEDIAGFI(ngrid,'alpha_c',
     230c    &                       'alpha_c',
     231c    &                       ' ',3,alpha_c)
     232c     endif !hdo
    160233c------------------------------------------------------------------
    161234      return
Note: See TracChangeset for help on using the changeset viewer.