source: trunk/LMDZ.MARS/libf/aeronomars/surfacearea.F @ 461

Last change on this file since 461 was 459, checked in by emillour, 13 years ago

Mars GCM: Include changes and updates for photochemistry by FL:

  • aeronomars/calchim.F : change in units of surface density.
  • aeronomars/surfacearea.F : new routine to compute ice and dust surface area

(m2/m3) available for heterogeneous reactions.

  • phymars/initracer.F : bug correction: initialize igcm_ch4 and change loop

bounds (when guessing tracer names/properties with
old input files).

  • phymars/watercloud.F : cleanup.
  • phymars/physiq.F : add call to surfacearea; photochemistry is now called

after sedimentation to take into acount updated rdust
and rice.

EM

File size: 3.6 KB
Line 
1      subroutine surfacearea(ngrid, nlay, pplay, pzlay, pt, pq, nq,
2     $                       rdust, rice, tau, tauscaling,
3     $                       surfdust, surfice)
4
5      implicit none
6
7!==========================================================================
8!     calculation of the ice and dust surface area (m2/m3)
9!     available for heterogeneous reactions
10!
11!     Franck Lefevre
12!     version 1.0 november 2011
13!==========================================================================
14
15#include "dimensions.h"
16#include "dimphys.h"
17#include "comcstfi.h"
18#include "callkeys.h"
19#include "tracer.h"
20#include "dimradmars.h"
21#include "chimiedata.h"
22#include "conc.h"
23
24! input
25
26      integer ngrid, nlay
27      integer nq                   ! number of tracers
28      real pplay(ngrid,nlay)       ! pressure at mid-layers (Pa)
29      real pzlay(ngrid,nlay)       ! altitude at mid-layers (m)
30      real pt(ngrid,nlay)          ! temperature at mid-layers (K)
31      real pq(ngrid,nlay,nq)       ! tracers (kg/kg)
32      real rdust(ngrid,nlay)       ! dust geometric mean radius (m)
33      real rice(ngrid,nlay)        ! ice mass mean radius (m)
34      real tau(ngrid,naerkind)     ! column dust optical depth at each point
35      real tauscaling(ngrid)       ! conversion factor for dust amount
36
37! output
38
39      real surfdust(ngrid,nlay)    ! dust surface area (m2/m3)
40      real surfice(ngrid,nlay)     ! water-ice surface area (m2/m3)
41
42! local
43
44      integer l, ig
45      real rho                     ! density (kg/m3)
46      real ccntyp                  ! typical dust number density (#/kg)
47                                   ! (microphys = false)
48      real rdusttyp                ! typical dust radius (m)
49                                   ! (microphys = false)
50
51!==========================================================================
52
53      if (microphys) then ! improvedclouds
54         do l = 1,nlay
55            do ig = 1,ngrid
56               rho = pplay(ig,l)/(rnew(ig,l)*pt(ig,l))
57               surfdust(ig,l) = pq(ig,l,igcm_dust_number)*rho
58     $                          *tauscaling(ig)
59     $                          *4.*pi*rdust(ig,l)**2
60               surfice(ig,l)  = pq(ig,l,igcm_ccn_number)*rho
61     $                          *tauscaling(ig)
62     $                          *4.*pi*rice(ig,l)**2
63            end do
64         end do
65      else            ! simpleclouds
66         do l = 1,nlay
67            do ig = 1,ngrid
68               rho = pplay(ig,l)/(rnew(ig,l)*pt(ig,l))
69               rdusttyp = max(.8e-6*exp(-pzlay(ig,l)/18000.),1.e-9)
70               ccntyp = 1.3e+8*max(tau(ig,1),0.001)/0.1
71     $                  *exp(-pzlay(ig,l)/10000.)
72               ccntyp = ccntyp/ccn_factor
73               if (rice(ig,l) .gt. rdust(ig,l)) then
74                  surfdust(ig,l) = ccntyp*(ccn_factor - 1.)*rho
75     $                             *4.*pi*rdusttyp**2
76                  surfice(ig,l)  = ccntyp*4.*pi*rice(ig,l)**2
77               else
78                  surfdust(ig,l) = ccntyp*ccn_factor*rho
79     $                             *4.*pi*rdusttyp**2
80                  surfice(ig,l)  = 0.
81               end if
82            end do
83         end do
84      end if         ! of microphys
85
86! write diagnostics in micron2/cm3
87
88      call wstats(ngrid,"surfdust", "Dust surface area",
89     $            "micron2 cm-3",3,surfdust*1.e6)
90      call writediagfi(ngrid,"surfdust", "Dust cloud surface area",
91     $            "micron2 cm-3",3,surfdust*1.e6)
92      call wstats(ngrid,"surfice", "Ice cloud surface area",
93     $            "micron2 cm-3",3,surfice*1.e6)
94      call writediagfi(ngrid,"surfice", "Ice cloud surface area",
95     $            "micron2 cm-3",3,surfice*1.e6)
96
97      return
98      end
Note: See TracBrowser for help on using the repository browser.