FMS
2025.04
Flexible Modeling System
sat_vapor_pres_k.F90
1
!***********************************************************************
2
!* Apache License 2.0
3
!*
4
!* This file is part of the GFDL Flexible Modeling System (FMS).
5
!*
6
!* Licensed under the Apache License, Version 2.0 (the "License");
7
!* you may not use this file except in compliance with the License.
8
!* You may obtain a copy of the License at
9
!*
10
!* http://www.apache.org/licenses/LICENSE-2.0
11
!*
12
!* FMS is distributed in the hope that it will be useful, but WITHOUT
13
!* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied;
14
!* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15
!* PARTICULAR PURPOSE. See the License for the specific language
16
!* governing permissions and limitations under the License.
17
!***********************************************************************
18
!> @defgroup sat_vapor_pres_k_mod sat_vapor_pres_k_mod
19
!> @ingroup sat_vapor_pres
20
!> @brief Kernel module to be used by @ref sat_vapor_pres_mod for
21
!! table lookups and calculations
22
23
module
sat_vapor_pres_k_mod
24
25
! This module is what I (pjp) think a kernel should be.
26
! There have been many proposals as to what a kernel should look like.
27
! If fact, so many different ideas have been expressed that the lack
28
! of agreement has greatly hampered progress.
29
! The only way to move forward is to limit the requirments for a kernel
30
! to only what is widely agreeded upon.
31
! I believe that there are only two things widely agreeded upon.
32
33
! 1) A kernel should be independent of the rest of FMS so that it can
34
! easily be ported into another programming system.
35
! This requires that a kernel does not access anything by use association.
36
! The one exception is this kernel, because it is not practical for physics
37
! modules to avoid using a module that computes the saturation vapor
38
! pressure of water vapor.
39
40
! 2) For the sake of thread safety, module globals should be written only at initialization.
41
! In this case, the module globals are the tables and a handful of scalars.
42
43
! 3) A kernel should not read from an external file.
44
45
! One of the things that was not widely agreeded upon is that a kernel should
46
! not be a fortran module. This complicates things greatly for questionable
47
! benefit and could be done as a second step anyway, if necessary.
48
49
use
fms_mod,
only
:
error_mesg
, fatal
50
use
platform_mod,
only
: r4_kind, r8_kind
51
52
implicit none
53
private
54
55
! Include variable "version" to be written to log file.
56
#include<file_version.h>
57
58
public
::
sat_vapor_pres_init_k
59
public
::
lookup_es_k
60
public
::
lookup_des_k
61
public
::
lookup_es_des_k
62
public
::
lookup_es2_k
63
public
::
lookup_des2_k
64
public
::
lookup_es2_des2_k
65
public
::
lookup_es3_k
66
public
::
lookup_des3_k
67
public
::
lookup_es3_des3_k
68
public
::
compute_qs_k
69
public
::
compute_mrs_k
70
71
!> @ingroup sat_vapor_pres_k_mod
72
interface
sat_vapor_pres_init_k
73
module procedure
sat_vapor_pres_init_k_r4
74
module procedure
sat_vapor_pres_init_k_r8
75
end interface
sat_vapor_pres_init_k
76
77
!> @ingroup sat_vapor_pres_k_mod
78
interface
compute_es_k
79
module procedure
compute_es_k_r4
80
module procedure
compute_es_k_r8
81
end interface
compute_es_k
82
83
interface
compute_es_liq_k
84
module procedure
compute_es_liq_k_r4
85
module procedure
compute_es_liq_k_r8
86
end interface
compute_es_liq_k
87
88
interface
compute_es_liq_ice_k
89
module procedure
compute_es_liq_ice_k_r4
90
module procedure
compute_es_liq_ice_k_r8
91
end interface
compute_es_liq_ice_k
92
93
!> @ingroup sat_vapor_pres_k_mod
94
interface
lookup_es_k
95
module procedure
lookup_es_k_0d_r4
96
module procedure
lookup_es_k_0d_r8
97
module procedure
lookup_es_k_1d_r4
98
module procedure
lookup_es_k_1d_r8
99
module procedure
lookup_es_k_2d_r4
100
module procedure
lookup_es_k_2d_r8
101
module procedure
lookup_es_k_3d_r4
102
module procedure
lookup_es_k_3d_r8
103
end interface
104
105
!> @ingroup sat_vapor_pres_k_mod
106
interface
lookup_des_k
107
module procedure
lookup_des_k_0d_r4
108
module procedure
lookup_des_k_0d_r8
109
module procedure
lookup_des_k_1d_r4
110
module procedure
lookup_des_k_1d_r8
111
module procedure
lookup_des_k_2d_r4
112
module procedure
lookup_des_k_2d_r8
113
module procedure
lookup_des_k_3d_r4
114
module procedure
lookup_des_k_3d_r8
115
end interface
116
117
!> @ingroup sat_vapor_pres_k_mod
118
interface
lookup_es_des_k
119
module procedure
lookup_es_des_k_0d_r4
120
module procedure
lookup_es_des_k_0d_r8
121
module procedure
lookup_es_des_k_1d_r4
122
module procedure
lookup_es_des_k_1d_r8
123
module procedure
lookup_es_des_k_2d_r4
124
module procedure
lookup_es_des_k_2d_r8
125
module procedure
lookup_es_des_k_3d_r4
126
module procedure
lookup_es_des_k_3d_r8
127
end interface
128
129
!> @ingroup sat_vapor_pres_k_mod
130
interface
lookup_es2_k
131
module procedure
lookup_es2_k_0d_r4
132
module procedure
lookup_es2_k_0d_r8
133
module procedure
lookup_es2_k_1d_r4
134
module procedure
lookup_es2_k_1d_r8
135
module procedure
lookup_es2_k_2d_r4
136
module procedure
lookup_es2_k_2d_r8
137
module procedure
lookup_es2_k_3d_r4
138
module procedure
lookup_es2_k_3d_r8
139
end interface
140
141
!> @ingroup sat_vapor_pres_k_mod
142
interface
lookup_des2_k
143
module procedure
lookup_des2_k_0d_r4
144
module procedure
lookup_des2_k_0d_r8
145
module procedure
lookup_des2_k_1d_r4
146
module procedure
lookup_des2_k_1d_r8
147
module procedure
lookup_des2_k_2d_r4
148
module procedure
lookup_des2_k_2d_r8
149
module procedure
lookup_des2_k_3d_r4
150
module procedure
lookup_des2_k_3d_r8
151
end interface
152
153
!> @ingroup sat_vapor_pres_k_mod
154
interface
lookup_es2_des2_k
155
module procedure
lookup_es2_des2_k_0d_r4
156
module procedure
lookup_es2_des2_k_0d_r8
157
module procedure
lookup_es2_des2_k_1d_r4
158
module procedure
lookup_es2_des2_k_1d_r8
159
module procedure
lookup_es2_des2_k_2d_r4
160
module procedure
lookup_es2_des2_k_2d_r8
161
module procedure
lookup_es2_des2_k_3d_r4
162
module procedure
lookup_es2_des2_k_3d_r8
163
end interface
164
165
!> @ingroup sat_vapor_pres_k_mod
166
interface
lookup_es3_k
167
module procedure
lookup_es3_k_0d_r4
168
module procedure
lookup_es3_k_0d_r8
169
module procedure
lookup_es3_k_1d_r4
170
module procedure
lookup_es3_k_1d_r8
171
module procedure
lookup_es3_k_2d_r4
172
module procedure
lookup_es3_k_2d_r8
173
module procedure
lookup_es3_k_3d_r4
174
module procedure
lookup_es3_k_3d_r8
175
end interface
176
177
!> @ingroup sat_vapor_pres_k_mod
178
interface
lookup_des3_k
179
module procedure
lookup_des3_k_0d_r4
180
module procedure
lookup_des3_k_0d_r8
181
module procedure
lookup_des3_k_1d_r4
182
module procedure
lookup_des3_k_1d_r8
183
module procedure
lookup_des3_k_2d_r4
184
module procedure
lookup_des3_k_2d_r8
185
module procedure
lookup_des3_k_3d_r4
186
module procedure
lookup_des3_k_3d_r8
187
end interface
188
189
!> @ingroup sat_vapor_pres_k_mod
190
interface
lookup_es3_des3_k
191
module procedure
lookup_es3_des3_k_0d_r4
192
module procedure
lookup_es3_des3_k_0d_r8
193
module procedure
lookup_es3_des3_k_1d_r4
194
module procedure
lookup_es3_des3_k_1d_r8
195
module procedure
lookup_es3_des3_k_2d_r4
196
module procedure
lookup_es3_des3_k_2d_r8
197
module procedure
lookup_es3_des3_k_3d_r4
198
module procedure
lookup_es3_des3_k_3d_r8
199
end interface
200
201
!> @ingroup sat_vapor_pres_k_mod
202
interface
compute_qs_k
203
module procedure
compute_qs_k_0d_r4
204
module procedure
compute_qs_k_0d_r8
205
module procedure
compute_qs_k_1d_r4
206
module procedure
compute_qs_k_1d_r8
207
module procedure
compute_qs_k_2d_r4
208
module procedure
compute_qs_k_2d_r8
209
module procedure
compute_qs_k_3d_r4
210
module procedure
compute_qs_k_3d_r8
211
end interface
212
!> @ingroup sat_vapor_pres_k_mod
213
interface
compute_mrs_k
214
module procedure
compute_mrs_k_0d_r4
215
module procedure
compute_mrs_k_0d_r8
216
module procedure
compute_mrs_k_1d_r4
217
module procedure
compute_mrs_k_1d_r8
218
module procedure
compute_mrs_k_2d_r4
219
module procedure
compute_mrs_k_2d_r8
220
module procedure
compute_mrs_k_3d_r4
221
module procedure
compute_mrs_k_3d_r8
222
end interface
compute_mrs_k
223
224
!> @addtogroup sat_vapor_pres_k_mod
225
!> @{
226
227
real
(kind=r8_kind) :: dtres, tepsl, tminl, dtinvl
228
integer
:: table_siz
229
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: table
! sat vapor pres (es)
230
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: dtable
! first derivative of es
231
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: d2table
! second derivative of es
232
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: table2
! sat vapor pres (es)
233
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: dtable2
! first derivative of es
234
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: d2table2
! second derivative of es
235
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: table3
! sat vapor pres (es)
236
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: dtable3
! first derivative of es
237
real
(kind=r8_kind),
dimension(:)
,
allocatable
:: d2table3
! second derivative of es
238
239
logical
:: use_exact_qs
240
logical
:: module_is_initialized = .false.
241
242
contains
243
244
!#######################################################################
245
!#######################################################################
246
247
#include "sat_vapor_pres_k_r4.fh"
248
#include "sat_vapor_pres_k_r8.fh"
249
250
end module
sat_vapor_pres_k_mod
251
!> @}
252
! close documentation grouping
fms_mod::error_mesg
subroutine, public error_mesg(routine, message, level)
Print notes, warnings and error messages; terminates program for warning and error messages....
Definition:
fms.F90:441
sat_vapor_pres_k_mod::compute_es_k
Definition:
sat_vapor_pres_k.F90:78
sat_vapor_pres_k_mod::compute_mrs_k
Definition:
sat_vapor_pres_k.F90:213
sat_vapor_pres_k_mod::compute_qs_k
Definition:
sat_vapor_pres_k.F90:202
sat_vapor_pres_k_mod::lookup_des2_k
Definition:
sat_vapor_pres_k.F90:142
sat_vapor_pres_k_mod::lookup_des3_k
Definition:
sat_vapor_pres_k.F90:178
sat_vapor_pres_k_mod::lookup_des_k
Definition:
sat_vapor_pres_k.F90:106
sat_vapor_pres_k_mod::lookup_es2_des2_k
Definition:
sat_vapor_pres_k.F90:154
sat_vapor_pres_k_mod::lookup_es2_k
Definition:
sat_vapor_pres_k.F90:130
sat_vapor_pres_k_mod::lookup_es3_des3_k
Definition:
sat_vapor_pres_k.F90:190
sat_vapor_pres_k_mod::lookup_es3_k
Definition:
sat_vapor_pres_k.F90:166
sat_vapor_pres_k_mod::lookup_es_des_k
Definition:
sat_vapor_pres_k.F90:118
sat_vapor_pres_k_mod::lookup_es_k
Definition:
sat_vapor_pres_k.F90:94
sat_vapor_pres_k_mod::sat_vapor_pres_init_k
Definition:
sat_vapor_pres_k.F90:72
sat_vapor_pres_k_mod::compute_es_liq_ice_k
Definition:
sat_vapor_pres_k.F90:88
sat_vapor_pres_k_mod::compute_es_liq_k
Definition:
sat_vapor_pres_k.F90:83
sat_vapor_pres
sat_vapor_pres_k.F90
Generated by
1.9.1