source: trunk/LMDZ.TITAN/libf/phytitan/evapCH4.F90 @ 3090

Last change on this file since 3090 was 3090, checked in by slebonnois, 13 months ago

BdeBatz? : Cleans microphysics and makes few corrections for physics

File size: 6.3 KB
Line 
1subroutine evapCH4(ngrid,nlayer,ptimestep,pplev,zzlay,zzlev, &
2                   u,v,tsurf,pqCH4, &
3                   tankCH4,pdqCH4,dtsurfevap)
4
5use radcommon_h, only: gzlat         ! Gravity of the planet [m.s-2]
6use planete_mod, only: z0            ! Surface roughness of the planet [m]
7use geometry_mod, only: latitude_deg ! Latitude grid of the planet [°]
8
9implicit none
10
11!====================================================================
12!
13!   Purpose
14!   -------
15!   Surface flux for methane evaporation.
16!   The routine calculates the surface flux of methane
17!   And the latente heat of methane evaporation.
18!
19!   Implicit scheme.
20!   We start by adding to variables x the physical tendencies already computed.
21!   We resolve the equation :
22!   x(t+1) =  x(t) + A * (dx/dt) * dt
23!
24!
25!   INPUT
26!   -----
27!   ngrid     = Number of grid points in the chunk [-]
28!   nlayer    = Number of vertical layers [-]
29!   ptimestep = Time step [s]
30!   pplev     = Intermediate pressure levels [Pa]
31!   zzlay     = Altitude at the middle of the atmospheric layers (ref : local surf) [m]
32!   zzlev     = Altitude at the atmospheric layer boundaries (ref : local surf) [m]
33!   u         = Zonal component of the wind [m.s-1]
34!   v         = Meridional component of the wind [m.s-1]
35!   tsurf     = Surface temperature [K]
36!   pqCH4     = Molar fraction of CH4 [mol.mol-1]
37!
38!
39!   OUTPUT
40!   ------
41!   tankCH4    = Depth of surface methane tank [m]
42!   pdqCH4     = Molar fraction tendency of CH4 at the surface [mol.mol-1.s-1]
43!   dtsurfevap = Evaporation heating rate at the surface [K.s-1]
44!
45!
46!   Author
47!   ------
48!   B. de Batz de Trenquelléon (10/2022)
49!
50!====================================================================   
51
52
53!------------------------------------
54! 0. DECLARATIONS
55!------------------------------------
56
57! Inputs :
58!---------
59integer, intent(in) :: ngrid
60integer, intent(in) :: nlayer
61real, intent(in)    :: ptimestep
62real, intent(in)    :: pplev(ngrid,nlayer+1)
63real, intent(in)    :: zzlay(ngrid,nlayer)
64real, intent(in)    :: zzlev(ngrid,nlayer+1)
65real, intent(in)    :: u(ngrid,nlayer)
66real, intent(in)    :: v(ngrid,nlayer)
67real, intent(in)    :: tsurf(ngrid)
68real, intent(in)    :: pqCH4(ngrid,nlayer)
69
70! Outputs :
71!----------
72real, intent(out) :: tankCH4(ngrid)
73real, intent(out) :: pdqCH4(ngrid)
74real, intent(out) :: dtsurfevap(ngrid)
75
76! Parameters :
77!-------------
78real, parameter :: karman = 0.4     ! Karman constant [-]
79real, parameter :: humCH4 = 0.5     ! Imposed surface humidity for CH4 [-]
80
81real, parameter :: Flnp = 0.05      ! Fraction occupied by lakes (North Pole)
82real, parameter :: Flsp = 0.005     ! Fraction occupied by lakes (South Pole)
83
84real, parameter :: mmolair = 28.e-3 ! Molar mass of air [kg.mol-1]
85real, parameter :: mmolCH4 = 16.e-3 ! Molar mass of CH4 [kg.mol-1]
86real, parameter :: rhoiCH4 = 425.   ! Density of ice of CH4 [kg.m-3]
87
88real, parameter :: TcCH4  = 190.56  ! Critical point of CH4 [K]
89real, parameter :: Cplake = 2689992 ! Surface heat capacity for hydrocarbon lakes [J.m-2.K-1] (Tokano 2005)
90
91! Local variables :
92!------------------
93integer :: ig
94
95! Initialisation :
96real*8  :: rhoair     ! Density of air [kg.m-3]
97real*8  :: ws         ! Horizontal wind at the surface [m.s-1]
98real*8  :: Cd         ! Turbulent term [-]
99real*8  :: qsatCH4    ! Saturation profile of CH4 [mol.mol-1]
100
101! Flux :
102real*8  :: flux       ! Surface flux [kg.m-2.s-1]
103real*8  :: fluxCH4    ! Surface flux fo CH4 [kg.m-2.s-1.mol.mol-1]
104
105! Variations of CH4 :
106real*8  :: newpqCH4   ! New molar fraction of CH4 in the first layer [mol.mol-1]
107real*8  :: dtankCH4   ! Trend of CH4's tank [m]
108
109! Latente heat :
110real*8  :: ftm, LvCH4 ! Variables for latente heat [-, J.kg-1]
111
112
113!------------------------------------
114! 1. INITIALISATION
115!------------------------------------
116
117do ig = 1, ngrid ! Main loop on the horizontal grid
118
119  ! Density of the first layer of the atmosphere [kg.m-3]
120  rhoair = (pplev(ig,1) - pplev(ig,2)) / gzlat(ig,1) / (zzlev(ig,2) - zzlev(ig,1))
121
122  ! Horizontal winds at the surface [m.s-1]
123  ws = sqrt(u(ig,1)*u(ig,1) + v(ig,1)*v(ig,1)) * (10. / zzlay(ig,1))**0.2
124
125  ! Source of turbulent kinetic energy at the surface [-] (Forget et al. 1999)
126  Cd = (karman / log(1. + zzlay(ig,1)/z0))**2
127
128  ! Saturation profile of CH4 [mol.mol-1] (Fray and Schmidt 2009) :
129  qsatCH4 = (1.0e5 / pplev(ig,1)) * exp(1.051e1 - 1.110e3/tsurf(ig) - 4.341e3/tsurf(ig)**2 + 1.035e5/tsurf(ig)**3 - 7.910e5/tsurf(ig)**4)
130  qsatCH4 = humCH4 * qsatCH4
131  ! CH4 : 0.80 * qsat because of dissolution in N2
132  qsatCH4 = 0.80 * qsatCH4
133
134  ! Flux at the surface [kg.m-2.s-1] :
135  flux = rhoair * Cd * ws
136
137  ! <North Pole>
138  if (REAL(latitude_deg(ig)) .ge. 70.) then
139    flux = Flnp * flux
140  ! <South Pole>
141  else if (REAL(latitude_deg(ig)) .le. -70.) then
142    flux = Flsp * flux
143  ! <Mid Latitudes>
144  else
145    flux = 0.0
146  endif
147
148  ! Empty tank ?
149  if (tankCH4(ig) .le. 1.e-30) then
150    flux = 0.0
151    tankCH4(ig) = 1.e-30
152  endif
153 
154  ! Flux of CH4 at the surface [kg.m-2.s-1.mol.mol-1] :
155  fluxCH4 = flux * (qsatCH4 - pqCH4(ig,1))
156
157
158!------------------------------------
159! 2. IMPLICIT SCHEME
160!------------------------------------
161
162  ! Flux at the surface [kg.m-2.s-1] --> [s-1] :
163  flux = flux / rhoair / (zzlev(ig,2) - zzlev(ig,1))
164
165  ! New molar fraction of CH4 in the first layer [mol.mol-1] :
166  newpqCH4 = (pqCH4(ig,1) + flux * ptimestep * qsatCH4) / (1. + flux * ptimestep)
167
168  ! Trend of CH4's tank [m]
169  dtankCH4 = - (newpqCH4 - pqCH4(ig,1)) * rhoair * (zzlev(ig,2) - zzlev(ig,1)) * mmolCH4 / mmolair / rhoiCH4
170
171  ! New tank depth of CH4 [m]
172  if ((tankCH4(ig) + dtankCH4) .ge. 0.) then
173    tankCH4(ig) = tankCH4(ig) + dtankCH4
174  else
175    newpqCH4 = tankCH4(ig) / (rhoair * (zzlev(ig,2) - zzlev(ig,1)) * mmolCH4 / mmolair / rhoiCH4) + pqCH4(ig,1)
176    tankCH4(ig) = 1.e-30
177  endif
178
179  ! Trend of CH4's molar fraction in the first layer [mol.mol-1.s-1]
180  pdqCH4(ig) = (newpqCH4 - pqCH4(ig,1)) / ptimestep
181
182
183!------------------------------------
184! 3. LATENTE HEAT
185!------------------------------------
186
187  ftm = (1. - tsurf(ig) / TcCH4)
188  if(ftm .le. 1.e-3) then
189    ftm = 1.e-3
190  endif
191 
192  ! Latente heat of CH4 vaporisation [J.kg-1.mol.mol-1]
193  LvCH4 = 8.314 * 190.4 * (7.08 * ftm**0.354 + 10.95 * 1.1e-2 * ftm**0.456) / mmolCH4
194
195  ! Evaporation heating rate [K.s-1]
196  dtsurfevap(ig) = - (fluxCH4 * LvCH4) / Cplake
197
198enddo ! End of main loop on the horizontal grid
199
200return
201
202end subroutine evapCH4
Note: See TracBrowser for help on using the repository browser.