source: flexpart.git/src/qvsat.f90 @ 3481cc1

10.4.1_peseiGFS_025bugfixes+enhancementsdevrelease-10release-10.4.1scaling-bug
Last change on this file since 3481cc1 was 3481cc1, checked in by Ignacio Pisso <ip@…>, 4 years ago

move license from headers to a different file

  • Property mode set to 100644
File size: 3.8 KB
Line 
1!##################################################################
2!##################################################################
3!######                                                      ######
4!######                     Developed by                     ######
5!######     Center for Analysis and Prediction of Storms     ######
6!######                University of Oklahoma                ######
7!######                                                      ######
8!##################################################################
9!##################################################################
10
11function f_qvsat( p, t )
12
13  !PURPOSE:
14  !
15  !Calculate the saturation specific humidity using enhanced Teten's
16  !formula.
17  !
18  !AUTHOR: Yuhe Liu
19  !01/08/1998
20  !
21  !MODIFICATION HISTORY:
22  !
23  !INPUT :
24  !  p        Pressure (Pascal)
25  !  t        Temperature (K)
26  !OUTPUT:
27  !  f_qvsat  Saturation water vapor specific humidity (kg/kg).
28  !
29  !Variable Declarations.
30  !
31
32  implicit none
33
34  real :: p         ! Pressure (Pascal)
35  real :: t         ! Temperature (K)
36  real :: f_qvsat   ! Saturation water vapor specific humidity (kg/kg)
37  real :: f_esl,f_esi,fespt
38
39  real,parameter ::  rd     = 287.0 ! Gas constant for dry air  (m**2/(s**2*K))
40  real,parameter ::  rv     = 461.0 ! Gas constant for water vapor  (m**2/(s**2*K)).
41  real,parameter ::  rddrv  = rd/rv
42
43
44  ! Change by A. Stohl to save computation time:
45  ! IF ( t.ge.273.15 ) THEN     ! for water
46  if ( t.ge.253.15 ) then      ! modification Petra Seibert
47                               ! (supercooled water may be present)
48    fespt=f_esl(p,t)
49  else
50    fespt=f_esi(p,t)
51  endif
52
53!!$  f_qvsat = rddrv * fespt / (p-(1.0-rddrv)*fespt)      !old
54  if (p-(1.0-rddrv)*fespt == 0.) then                     !bugfix
55     f_qvsat = 1.
56  else
57     f_qvsat = rddrv * fespt / (p-(1.0-rddrv)*fespt)
58  end if
59
60  return
61end function f_qvsat
62
63
64function f_esl( p, t )
65
66  implicit none
67
68  real :: p         ! Pressure (Pascal)
69  real :: t         ! Temperature (K)
70  real :: f_esl     ! Saturation water vapor pressure over liquid water
71
72  real :: f
73
74  !#######################################################################
75  !
76  !Saturation specific humidity parameters used in enhanced Teten's
77  !formula. (See A. Buck, JAM 1981)
78  !
79  !#######################################################################
80
81  real,parameter ::  satfwa = 1.0007
82  real,parameter ::  satfwb = 3.46e-8  ! for p in Pa
83
84  real,parameter ::  satewa = 611.21   ! es in Pa
85  real,parameter ::  satewb = 17.502
86  real,parameter ::  satewc = 32.18
87
88  real,parameter ::  satfia = 1.0003
89  real,parameter ::  satfib = 4.18e-8  ! for p in Pa
90
91  real,parameter ::  sateia = 611.15   ! es in Pa
92  real,parameter ::  sateib = 22.452
93  real,parameter ::  sateic = 0.6
94
95  f = satfwa + satfwb * p
96  f_esl = f * satewa * exp( satewb*(t-273.15)/(t-satewc) )
97
98  return
99end function f_esl
100
101function f_esi( p, t )
102
103  implicit none
104
105  real :: p         ! Pressure (Pascal)
106  real :: t         ! Temperature (K)
107  real :: f_esi     ! Saturation water vapor pressure over ice (Pa)
108
109  real :: f
110
111  !#######################################################################
112  !
113  !Saturation specific humidity parameters used in enhanced Teten's
114  !formula. (See A. Buck, JAM 1981)
115  !
116  !#######################################################################
117  !
118  real,parameter ::  satfwa = 1.0007
119  real,parameter ::  satfwb = 3.46e-8  ! for p in Pa
120
121  real,parameter ::  satewa = 611.21   ! es in Pa
122  real,parameter ::  satewb = 17.502
123  real,parameter ::  satewc = 32.18
124
125  real,parameter ::  satfia = 1.0003
126  real,parameter ::  satfib = 4.18e-8  ! for p in Pa
127
128  real,parameter ::  sateia = 611.15   ! es in Pa
129  real,parameter ::  sateib = 22.452
130  real,parameter ::  sateic = 0.6
131
132  f = satfia + satfib * p
133  f_esi = f * sateia * exp( sateib*(t-273.15)/(t-sateic) )
134
135  return
136end function f_esi
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG