-
Notifications
You must be signed in to change notification settings - Fork 10
/
atmos_tracer_driver.html
389 lines (389 loc) · 14.2 KB
/
atmos_tracer_driver.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
<!--
***********************************************************************
* GNU Lesser General Public License
*
* This file is part of the GFDL Atmosphere Null Model Component.
*
* Atmos Null is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Atmos Null is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Atmos Null.
* If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
-->
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>Module atmos_tracer_driver_mod</title>
<link type="text/css" href="http://www.gfdl.noaa.gov/~fms/style/doc.css" rel="stylesheet">
<STYLE TYPE="text/css">
.fixed {
font-size:medium;
font-family:monospace;
border-style:none;
border-width:0.1em;
padding:0.1em;
color:#663366;
}
</STYLE>
</head>
<body>
<a name="TOP"></a><font class="header" size="1"><a href="#PUBLIC INTERFACE">PUBLIC INTERFACE </a>~
<a href="#PUBLIC DATA">PUBLIC DATA </a>~
<a href="#PUBLIC ROUTINES">PUBLIC ROUTINES </a>~
<a href="#NAMELIST">NAMELIST </a>~
<a href="#DIAGNOSTIC FIELDS">DIAGNOSTIC FIELDS </a>~
<a href="#ERROR MESSAGES">ERROR MESSAGES </a>~
<a href="#REFERENCES">REFERENCES </a>~
<a href="#NOTES">NOTES</a></font>
<hr>
<h2>Module atmos_tracer_driver_mod</h2>
<a name="HEADER"></a>
<!-- BEGIN HEADER -->
<div>
<b>Contact: </b><a href="mailto:William.Cooke@noaa.gov"> William Cooke </a>
<br>
<b>Reviewers: </b><a href="mailto:Matthew.Harrison@noaa.gov"> Matt Harrison </a>,
<a href="mailto:Bruce.Wyman@noaa.gov"> Bruce Wyman </a>
<br>
<b>Change History: </b><a href="http://www.gfdl.noaa.gov/fms-cgi-bin/cvsweb.cgi/FMS/atmos/null">WebCVS Log</a>
<br>
<br>
</div>
<!-- END HEADER -->
<a name="OVERVIEW"></a>
<hr>
<h4>OVERVIEW</h4>
<!-- BEGIN OVERVIEW -->
<p class="text"> This code allows the user to easily add tracers to the FMS framework. </p>
<!-- END OVERVIEW -->
<a name="DESCRIPTION"></a>
<!-- BEGIN DESCRIPTION -->
<div> This is a null module to be used when no atmospheric model is required.
<br>
<br>
This code allows a user to easily implement tracer code in the FMS
framework. The tracer and tracer tendency arrays are supplied along
with longtitude, latitude, wind, temperature, and pressure
information which allows a user to implement sources and sinks of the
tracer which depend on these parameters.
<br>
<br>
In the following example, radon being implemented in the atmosphere
will be used as an example of how to implement a tracer in the FMS
framework.
<br>
<br>
Within the global scope of tracer_driver_mod a use
statement should be inserted for each tracer to be added. <pre> use radon_mod, only : radon_sourcesink, radon_init, radon_end</pre> An integer parameter, which will be used as an identifier for the
tracer, should be assigned. <pre> integer :: nradon</pre> Within tracer_driver_init a call to the tracer manager is needed in
order to identify which tracer it has set the tracer as. <pre> nradon = get_tracer_index(MODEL_ATMOS,'radon')</pre> Here MODEL_ATMOS is a parameter defined in field_manager.
'radon' is the name of the tracer within the field_table.
<br>
<br>
If the tracer exists then the integer returned will be positive and it
can be used to call the initialization routines for the individual
tracers. <pre> if (nradon > 0) then
call radon_init(Argument list)
endif</pre> Within tracer_driver the user can also use the identifier to surround
calls to the source-sink routines for the tracer of interest.
<br>
<br>
<pre> if (nradon > 0 .and. nradon <= nt) then
call radon_sourcesink (Argument list)
rdt(:,:,:,nradon)=rdt(:,:,:,nradon)+rtnd(:,:,:)
endif</pre> It is the users responsibility to add the tendency generated by the
sourcesink routine.
<br>
<br>
Within tracer_driver_end the user can add calls to the
terminators for the appropriate source sink routines.
<br>
<br>
<pre> call radon_end</pre> This may simply be a deallocation statement or a routine to send
output to the logfile stating that the termination routine has been
called. </div>
<br>
<!-- END DESCRIPTION -->
<a name="OTHER MODULES USED"></a>
<hr>
<h4>OTHER MODULES USED</h4>
<!-- BEGIN OTHER MODULES USED -->
<div>
<pre> time_manager_mod<br>coupler_types_mod</pre>
</div>
<!-- END OTHER MODULES USED -->
<!-- BEGIN PUBLIC INTERFACE -->
<a name="PUBLIC INTERFACE"></a>
<hr>
<h4>PUBLIC INTERFACE</h4>
<div>
<dl>
<dt>
<a href="#atmos_tracer_driver">atmos_tracer_driver</a>:</dt>
<dd> A routine which allows tracer code to be called. </dd>
<dt>
<a href="#atmos_tracer_flux_init">atmos_tracer_flux_init</a>:</dt>
<dd> Subroutine to initialize the ocean-atmosphere gas flux modules </dd>
<dt>
<a href="#atmos_tracer_driver_init">atmos_tracer_driver_init</a>:</dt>
<dd> Subroutine to initialize the tracer driver module. </dd>
<dt>
<a href="#atmos_tracer_driver_end">atmos_tracer_driver_end</a>:</dt>
<dd> Subroutine to terminate the tracer driver module. </dd>
<dt>
<a href="#atmos_tracer_driver_gather_data">atmos_tracer_driver_gather_data</a>:</dt>
<dd> Subroutine to terminate the tracer driver module. </dd>
</dl>
</div>
<br>
<!-- END PUBLIC INTERFACE -->
<a name="PUBLIC DATA"></a>
<hr>
<h4>PUBLIC DATA</h4>
<!-- BEGIN PUBLIC DATA -->
<div>None.<br>
<br>
</div>
<!-- END PUBLIC DATA -->
<a name="PUBLIC ROUTINES"></a>
<hr>
<h4>PUBLIC ROUTINES</h4>
<!-- BEGIN PUBLIC ROUTINES -->
<ol type="a">
<li>
<a name="atmos_tracer_driver"></a>
<h4>atmos_tracer_driver</h4>
<pre>
<b>call atmos_tracer_driver </b>(is, ie, js, je, Time, lon, lat, land, phalf, pfull, r, & u, v, t, q, u_star, rdt, rm, rdiag, kbot)</pre>
<dl>
<dt>
<b>DESCRIPTION</b>
</dt>
<dd> This subroutine calls the source sink routines for atmospheric
tracers. This is the interface between the dynamical core of the
model and the tracer code. It should supply all the necessary
information to a user that they need in order to calculate the
tendency of that tracer with respect to emissions or chemical losses.
<br>
<br>
</dd>
<br>
<br>
<dt>
<b>INPUT</b>
</dt>
<dd>
<table border="0">
<tr>
<td valign="top" align="left"><tt>is, ie, js, je </tt></td><td> Local domain boundaries. <br> <span class="type">[integer]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>Time </tt></td><td> Model time. <br> <span class="type">[type(time_type)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>lon </tt></td><td> Longitude of the centre of the model gridcells <br> <span class="type">[real, dimension(:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>lat </tt></td><td> Latitude of the centre of the model gridcells <br> <span class="type">[real, dimension(:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>land </tt></td><td> Land/sea mask. <br> <span class="type">[logical, dimension(:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>phalf </tt></td><td> Pressures on the model half levels. <br> <span class="type">[real, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>pfull </tt></td><td> Pressures on the model full levels. <br> <span class="type">[real, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>r </tt></td><td> The tracer array in the component model. <br> <span class="type">[real, dimension(:,:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>u </tt></td><td> Zonal wind speed. <br> <span class="type">[real, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>v </tt></td><td> Meridonal wind speed. <br> <span class="type">[real, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>t </tt></td><td> Temperature. <br> <span class="type">[real, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>q </tt></td><td> Specific humidity. This may also be accessible as a
portion of the tracer array. <br> <span class="type">[real, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>u_star </tt></td><td> Friction velocity ::
The magnitude of the wind stress is density*(ustar**2)
The drag coefficient for momentum is u_star**2/(u**2+v**2) <br> <span class="type">[real, dimension(:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>rm </tt></td><td> The tracer array in the component model for the previous timestep. <br> <span class="type">[real, dimension(:,:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>kbot </tt></td><td> Integer array describing which model layer intercepts the surface. <br> <span class="type">[integer, optional, dimension(:,:)]</span></td>
</tr>
</table>
</dd>
<br>
<dt>
<b>INPUT/OUTPUT</b>
</dt>
<dd>
<table border="0">
<tr>
<td valign="top" align="left"><tt>rdt </tt></td><td> The tendency of the tracer array in the compenent
model. The tendency due to sources and sinks computed
in the individual tracer routines should be added to
this array before exiting tracer_driver. <br> <span class="type">[real, dimension(:,:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>rdiag </tt></td><td> The array of diagnostic tracers. As these may be changed within the
tracer routines for diagnostic purposes, they need to be writable. <br> <span class="type">[real, dimension(:,:,:,:)]</span></td>
</tr>
</table>
</dd>
<br>
</dl>
</li>
<li>
<a name="atmos_tracer_flux_init"></a>
<h4>atmos_tracer_flux_init</h4>
<dl>
<dt>
<b>DESCRIPTION</b>
</dt>
<dd> Subroutine to initialize the ocean-atmosphere gas flux modules </dd>
<br>
<br>
</dl>
</li>
<li>
<a name="atmos_tracer_driver_init"></a>
<h4>atmos_tracer_driver_init</h4>
<pre>
<b>call atmos_tracer_driver_init </b>(lonb,latb, r, mask, axes, Time)</pre>
<dl>
<dt>
<b>DESCRIPTION</b>
</dt>
<dd> The purpose of the arguments here are for passing on to the individual
tracer code. The user may wish to provide initial values which can be
implemented in the initialization part of the tracer code. Remember that
the tracer manager will provide a simple fixed or exponential profile if
the user provides data for this within the field table. However if a more
complicated profile is required then it should be set up in the
initialization section of the user tracer code. </dd>
<br>
<br>
<dt>
<b>INPUT</b>
</dt>
<dd>
<table border="0">
<tr>
<td valign="top" align="left"><tt>lonb </tt></td><td> The longitudes for the local domain. <br> <span class="type">[real, dimension(:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>latb </tt></td><td> The latitudes for the local domain. <br> <span class="type">[real, dimension(:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>mask </tt></td><td> optional mask (0. or 1.) that designates which grid points
are above (=1.) or below (=0.) the ground dimensioned as
(nlon,nlat,nlev). <br> <span class="type">[real, optional, dimension(:,:,:)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>Time </tt></td><td> Model time. <br> <span class="type">[type(time_type)]</span></td>
</tr>
<tr>
<td valign="top" align="left"><tt>axes </tt></td><td> The axes relating to the tracer array dimensioned as
(nlon, nlat, nlev, ntime) <br> <span class="type">[integer, dimension(4)]</span></td>
</tr>
</table>
</dd>
<br>
<dt>
<b>INPUT/OUTPUT</b>
</dt>
<dd>
<table border="0">
<tr>
<td valign="top" align="left"><tt>r </tt></td><td> Tracer fields dimensioned as (nlon,nlat,nlev,ntrace). <br> <span class="type">[real, dimension(:,:,:,:)]</span></td>
</tr>
</table>
</dd>
<br>
</dl>
</li>
<li>
<a name="atmos_tracer_driver_end"></a>
<h4>atmos_tracer_driver_end</h4>
<pre>
<b>call atmos_tracer_driver_end </b>
</pre>
<dl>
<dt>
<b>DESCRIPTION</b>
</dt>
<dd> Termination routine for tracer_driver. It should also call
the destructors for the individual tracer routines. </dd>
<br>
<br>
</dl>
</li>
<li>
<a name="atmos_tracer_driver_gather_data"></a>
<h4>atmos_tracer_driver_gather_data</h4>
<pre>
<b>call atmos_tracer_driver_gather_data </b>
</pre>
<dl>
<dt>
<b>DESCRIPTION</b>
</dt>
<dd> Termination routine for tracer_driver. It should also call
the destructors for the individual tracer routines. </dd>
<br>
<br>
</dl>
</li>
</ol>
<!-- END PUBLIC ROUTINES -->
<a name="PUBLIC TYPES"></a>
<!-- BEGIN PUBLIC TYPES -->
<!-- END PUBLIC TYPES --><a name="NAMELIST"></a>
<!-- BEGIN NAMELIST -->
<!-- END NAMELIST --><a name="DIAGNOSTIC FIELDS"></a>
<!-- BEGIN DIAGNOSTIC FIELDS -->
<!-- END DIAGNOSTIC FIELDS --><a name="DATA SETS"></a>
<!-- BEGIN DATA SETS -->
<hr>
<h4>DATA SETS</h4>
<div>None.<br>
<br>
</div>
<!-- END DATA SETS -->
<a name="PUBLIC CODE"></a>
<!-- BEGIN PUBLIC CODE -->
<!-- END PUBLIC CODE --><a name="ERROR MESSAGES"></a>
<!-- BEGIN ERROR MESSAGES -->
<hr>
<h4>ERROR MESSAGES</h4>
<div>None.<br>
<br>
</div>
<!-- END ERROR MESSAGES -->
<hr>
<div align="right">
<font size="-1"><a href="#TOP">top</a></font>
</div>
</body>
</html>