gphys 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ChangeLog +7414 -0
- data/LICENSE.txt +1 -1
- data/Rakefile +0 -2
- data/doc/derivative/math-doc/document/images.log +385 -0
- data/doc/ep_flux/math-doc/document/images.log +1375 -0
- data/doc/ganalysis/doc/NumRu.html +203 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis.html +931 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/BetaPlane.html +574 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/Fitting.html +576 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/LogP.html +425 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/Met.html +2021 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/MetZ.html +524 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/Planet.html +1047 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/QG.html +794 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/QG/Uninitialized.html +215 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/QG_common.html +603 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/QG_sphere.html +760 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/QG_sphere_common.html +251 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/QG_sphere_div.html +424 -0
- data/doc/ganalysis/doc/NumRu/GAnalysis/SigmaCoord.html +321 -0
- data/doc/ganalysis/doc/NumRu/GGraph.html +334 -0
- data/doc/ganalysis/doc/NumRu/GPhys.html +579 -0
- data/doc/ganalysis/doc/Object.html +210 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/beta_plane_rb.html +60 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/covariance_rb.html +56 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/eof_rb.html +64 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/fitting_rb.html +54 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/histogram_rb.html +58 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/log_p_rb.html +60 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/met_rb.html +60 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/met_z_rb.html +58 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/planet_rb.html +58 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/qg_rb.html +64 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis/sigma_coord_rb.html +56 -0
- data/doc/ganalysis/doc/__/__/lib/numru/ganalysis_rb.html +98 -0
- data/doc/ganalysis/doc/created.rid +13 -0
- data/doc/ganalysis/doc/images/brick.png +0 -0
- data/doc/ganalysis/doc/images/brick_link.png +0 -0
- data/doc/ganalysis/doc/images/bug.png +0 -0
- data/doc/ganalysis/doc/images/bullet_black.png +0 -0
- data/doc/ganalysis/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/ganalysis/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/ganalysis/doc/images/date.png +0 -0
- data/doc/ganalysis/doc/images/find.png +0 -0
- data/doc/ganalysis/doc/images/loadingAnimation.gif +0 -0
- data/doc/ganalysis/doc/images/macFFBgHack.png +0 -0
- data/doc/ganalysis/doc/images/package.png +0 -0
- data/doc/ganalysis/doc/images/page_green.png +0 -0
- data/doc/ganalysis/doc/images/page_white_text.png +0 -0
- data/doc/ganalysis/doc/images/page_white_width.png +0 -0
- data/doc/ganalysis/doc/images/plugin.png +0 -0
- data/doc/ganalysis/doc/images/ruby.png +0 -0
- data/doc/ganalysis/doc/images/tag_green.png +0 -0
- data/doc/ganalysis/doc/images/wrench.png +0 -0
- data/doc/ganalysis/doc/images/wrench_orange.png +0 -0
- data/doc/ganalysis/doc/images/zoom.png +0 -0
- data/doc/ganalysis/doc/index.html +383 -0
- data/doc/ganalysis/doc/js/darkfish.js +118 -0
- data/doc/ganalysis/doc/js/jquery.js +32 -0
- data/doc/ganalysis/doc/js/quicksearch.js +114 -0
- data/doc/ganalysis/doc/js/thickbox-compressed.js +10 -0
- data/doc/ganalysis/doc/rdoc.css +763 -0
- data/ext/numru/gphys/ext_init.c +1 -0
- data/ext/numru/gphys/quad_mesh_sample.c +478 -0
- data/gphys.gemspec +2 -2
- data/lib/numru/dclext.rb +394 -14
- data/lib/numru/derivative.rb +6 -0
- data/lib/numru/ganalysis/qg.rb +6 -4
- data/lib/numru/ggraph.rb +41 -8
- data/lib/numru/gphys/gphys.rb +62 -14
- data/lib/numru/gphys/gphys_io.rb +4 -4
- data/lib/numru/gphys/version.rb +2 -2
- metadata +84 -79
- data/.gitignore +0 -14
- data/TODO_ep_flux +0 -6
- data/gphys-bigmem.gemspec +0 -44
- data/install.rb +0 -130
- data/sample/cira86_to_nc.rb +0 -122
- data/sample/druby_cli1.rb +0 -23
- data/sample/druby_cli2.rb +0 -28
- data/sample/druby_serv1.rb +0 -30
- data/sample/druby_serv2.rb +0 -51
- data/sample/ep_flux/demo_NCEP_1.rb +0 -48
- data/sample/ep_flux/demo_NCEP_2.rb +0 -57
- data/sample/ep_flux/demo_NCEP_3.rb +0 -81
- data/sample/ggraph_latlon_labelling_dr002690.rb +0 -159
- data/sample/ggraph_mapfit-axes_dr002687.rb +0 -131
- data/sample/map_projection.rb +0 -121
- data/sample/ncep_theta_coord.rb +0 -79
- data/test_old/eof_slp.rb +0 -28
- data/test_old/mltbit.dat +0 -0
- data/test_old/test_ep_flux.rb +0 -533
- data/test_old/test_multibitIO.rb +0 -19
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
3
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
|
7
|
+
|
|
8
|
+
<title>Module: NumRu::GAnalysis::MetZ</title>
|
|
9
|
+
|
|
10
|
+
<link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
|
|
11
|
+
|
|
12
|
+
<script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
|
|
13
|
+
<script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
|
|
14
|
+
<script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
|
|
15
|
+
<script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
|
|
16
|
+
|
|
17
|
+
</head>
|
|
18
|
+
<body id="top" class="module">
|
|
19
|
+
|
|
20
|
+
<div id="metadata">
|
|
21
|
+
<div id="home-metadata">
|
|
22
|
+
<div id="home-section" class="section">
|
|
23
|
+
<h3 class="section-header">
|
|
24
|
+
<a href="../../index.html">Home</a>
|
|
25
|
+
<a href="../../index.html#classes">Classes</a>
|
|
26
|
+
<a href="../../index.html#methods">Methods</a>
|
|
27
|
+
</h3>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div id="file-metadata">
|
|
32
|
+
<div id="file-list-section" class="section">
|
|
33
|
+
<h3 class="section-header">In Files</h3>
|
|
34
|
+
<div class="section-body">
|
|
35
|
+
<ul>
|
|
36
|
+
|
|
37
|
+
<li><a href="../../__/__/lib/numru/ganalysis/met_z_rb.html?TB_iframe=true&height=550&width=785"
|
|
38
|
+
class="thickbox" title="../../lib/numru/ganalysis/met_z.rb">../../lib/numru/ganalysis/met_z.rb</a></li>
|
|
39
|
+
|
|
40
|
+
</ul>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div id="class-metadata">
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
<!-- Method Quickref -->
|
|
56
|
+
<div id="method-list-section" class="section">
|
|
57
|
+
<h3 class="section-header">Methods</h3>
|
|
58
|
+
<ul class="link-list">
|
|
59
|
+
|
|
60
|
+
<li><a href="#method-i-mass_strm_any">#mass_strm_any</a></li>
|
|
61
|
+
|
|
62
|
+
<li><a href="#method-i-mass_strm_p">#mass_strm_p</a></li>
|
|
63
|
+
|
|
64
|
+
</ul>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div id="project-metadata">
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
<div id="classindex-section" class="section project-section">
|
|
76
|
+
<h3 class="section-header">Class/Module Index
|
|
77
|
+
<span class="search-toggle"><img src="../../images/find.png"
|
|
78
|
+
height="16" width="16" alt="[+]"
|
|
79
|
+
title="show/hide quicksearch" /></span></h3>
|
|
80
|
+
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
|
|
81
|
+
<fieldset>
|
|
82
|
+
<legend>Quicksearch</legend>
|
|
83
|
+
<input type="text" name="quicksearch" value=""
|
|
84
|
+
class="quicksearch-field" />
|
|
85
|
+
</fieldset>
|
|
86
|
+
</form>
|
|
87
|
+
|
|
88
|
+
<ul class="link-list">
|
|
89
|
+
|
|
90
|
+
<li><a href="../../NumRu.html">NumRu</a></li>
|
|
91
|
+
|
|
92
|
+
<li><a href="../../NumRu/GAnalysis.html">NumRu::GAnalysis</a></li>
|
|
93
|
+
|
|
94
|
+
<li><a href="../../NumRu/GAnalysis/BetaPlane.html">NumRu::GAnalysis::BetaPlane</a></li>
|
|
95
|
+
|
|
96
|
+
<li><a href="../../NumRu/GAnalysis/Fitting.html">NumRu::GAnalysis::Fitting</a></li>
|
|
97
|
+
|
|
98
|
+
<li><a href="../../NumRu/GAnalysis/LogP.html">NumRu::GAnalysis::LogP</a></li>
|
|
99
|
+
|
|
100
|
+
<li><a href="../../NumRu/GAnalysis/Met.html">NumRu::GAnalysis::Met</a></li>
|
|
101
|
+
|
|
102
|
+
<li><a href="../../NumRu/GAnalysis/MetZ.html">NumRu::GAnalysis::MetZ</a></li>
|
|
103
|
+
|
|
104
|
+
<li><a href="../../NumRu/GAnalysis/Planet.html">NumRu::GAnalysis::Planet</a></li>
|
|
105
|
+
|
|
106
|
+
<li><a href="../../NumRu/GAnalysis/QG.html">NumRu::GAnalysis::QG</a></li>
|
|
107
|
+
|
|
108
|
+
<li><a href="../../NumRu/GAnalysis/QG/Uninitialized.html">NumRu::GAnalysis::QG::Uninitialized</a></li>
|
|
109
|
+
|
|
110
|
+
<li><a href="../../NumRu/GAnalysis/QG_common.html">NumRu::GAnalysis::QG_common</a></li>
|
|
111
|
+
|
|
112
|
+
<li><a href="../../NumRu/GAnalysis/QG_sphere.html">NumRu::GAnalysis::QG_sphere</a></li>
|
|
113
|
+
|
|
114
|
+
<li><a href="../../NumRu/GAnalysis/QG_sphere_common.html">NumRu::GAnalysis::QG_sphere_common</a></li>
|
|
115
|
+
|
|
116
|
+
<li><a href="../../NumRu/GAnalysis/QG_sphere_div.html">NumRu::GAnalysis::QG_sphere_div</a></li>
|
|
117
|
+
|
|
118
|
+
<li><a href="../../NumRu/GAnalysis/SigmaCoord.html">NumRu::GAnalysis::SigmaCoord</a></li>
|
|
119
|
+
|
|
120
|
+
<li><a href="../../NumRu/GGraph.html">NumRu::GGraph</a></li>
|
|
121
|
+
|
|
122
|
+
<li><a href="../../NumRu/GPhys.html">NumRu::GPhys</a></li>
|
|
123
|
+
|
|
124
|
+
<li><a href="../../Object.html">Object</a></li>
|
|
125
|
+
|
|
126
|
+
</ul>
|
|
127
|
+
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
|
128
|
+
</div>
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
<div id="documentation">
|
|
135
|
+
<h1 class="module">NumRu::GAnalysis::MetZ</h1>
|
|
136
|
+
|
|
137
|
+
<div id="description" class="description">
|
|
138
|
+
|
|
139
|
+
<p>Meterological analysis regarding vertical section, integration, etc.</p>
|
|
140
|
+
|
|
141
|
+
</div><!-- description -->
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
<div id="5Buntitled-5D" class="documentation-section">
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
<!-- Methods -->
|
|
156
|
+
|
|
157
|
+
<div id="public-instance-method-details" class="method-section section">
|
|
158
|
+
<h3 class="section-header">Public Instance Methods</h3>
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
<div id="mass_strm_any-method" class="method-detail ">
|
|
162
|
+
<a name="method-i-mass_strm_any"></a>
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
<div class="method-heading">
|
|
166
|
+
<span class="method-name">mass_strm_any</span><span
|
|
167
|
+
class="method-args">(v, ps, w, wcoord, vs=nil, ws=nil)</span>
|
|
168
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
<div class="method-description">
|
|
173
|
+
|
|
174
|
+
<p>mass stream function on any vertical coordinate</p>
|
|
175
|
+
|
|
176
|
+
<p>Similar to <a href="MetZ.html#method-i-mass_strm_p">mass_strm_p</a>, but it
|
|
177
|
+
supports representation to have an arbitrary physical quantity, such as
|
|
178
|
+
potential temperature, as the vertical coordinate (instead of pressure).</p>
|
|
179
|
+
|
|
180
|
+
<p>Applicable both to pressure- and sigma-coordinate input data</p>
|
|
181
|
+
|
|
182
|
+
<p>ARGUMENTS</p>
|
|
183
|
+
<ul><li>
|
|
184
|
+
<p>v [GPhys] : meridional wind with a vertical dimension (p or sigma) It must
|
|
185
|
+
have a latitudinal dimension too. Longitudinal and time dimensions are
|
|
186
|
+
optional. If it has a longitudinal dimension, zonal mean is taken. The
|
|
187
|
+
order of the dimensions is not restricted.</p>
|
|
188
|
+
</li><li>
|
|
189
|
+
<p>ps [GPhys] : surface pressure. Its must have the same grid as v but for the
|
|
190
|
+
vertical dimension (ps.rank must be v.rank-1)</p>
|
|
191
|
+
</li><li>
|
|
192
|
+
<p>w [GPhys] : Grid-point values (at the same points as v) of the quantity
|
|
193
|
+
used to represent the vertical coordinate. Its shape must be the same as
|
|
194
|
+
that of v, as a matter of course.</p>
|
|
195
|
+
</li><li>
|
|
196
|
+
<p>wcoord [1D VArray] : Output vertical coordinate. It must have the same
|
|
197
|
+
units as w.</p>
|
|
198
|
+
</li><li>
|
|
199
|
+
<p>vs [nil(default) or GPhys]: vs is not needed (neglected) when v has a sigma
|
|
200
|
+
coordinate. It is an optional parameter to specify the surface values of v,
|
|
201
|
+
when it is in the pressure coordinate. vs can be omitted (nil), even when v
|
|
202
|
+
has a pressure coordinate; in that case, vs is set by interpolating v if ps
|
|
203
|
+
is within the p range of v (e.g. when ps<=1000hPa), or it is naively
|
|
204
|
+
extended (using the bottom values of v) if ps is out of the range (e.g.
|
|
205
|
+
when ps>1000hPa). In other words, the current implementation assumes
|
|
206
|
+
that v is available below the surface, as is customary for reanalysis data.</p>
|
|
207
|
+
</li><li>
|
|
208
|
+
<p>ws [nil(default) or GPhys]: same as vs but for the surface value of w.</p>
|
|
209
|
+
</li></ul>
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
<div class="method-source-code" id="mass_strm_any-source">
|
|
214
|
+
<pre>
|
|
215
|
+
<span class="ruby-comment"># File ../../lib/numru/ganalysis/met_z.rb, line 182</span>
|
|
216
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">mass_strm_any</span>(<span class="ruby-identifier">v</span>, <span class="ruby-identifier">ps</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">wcoord</span>, <span class="ruby-identifier">vs</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">ws</span>=<span class="ruby-keyword">nil</span>)
|
|
217
|
+
|
|
218
|
+
<span class="ruby-identifier">pascal</span> = <span class="ruby-constant">Units</span>[<span class="ruby-string">"Pa"</span>]
|
|
219
|
+
<span class="ruby-identifier">grav</span> = <span class="ruby-constant">Met</span>.<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_f</span>
|
|
220
|
+
|
|
221
|
+
<span class="ruby-comment">#< check ></span>
|
|
222
|
+
|
|
223
|
+
<span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>,<span class="ruby-string">"v.shape != w.shape"</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">shape</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">w</span>.<span class="ruby-identifier">shape</span>
|
|
224
|
+
<span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>,<span class="ruby-string">"ps.rank != v.rank-1"</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">rank</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">rank</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>
|
|
225
|
+
<span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>,<span class="ruby-string">"w.units !~wcoord.units"</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">w</span>.<span class="ruby-identifier">units</span> <span class="ruby-operator">!~</span> <span class="ruby-identifier">wcoord</span>.<span class="ruby-identifier">units</span>
|
|
226
|
+
|
|
227
|
+
<span class="ruby-comment">#< preprare data ></span>
|
|
228
|
+
|
|
229
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">zdim</span> = <span class="ruby-constant">Met</span>.<span class="ruby-identifier">find_prs_d</span>(<span class="ruby-identifier">v</span>) <span class="ruby-comment"># substitution, not comparison</span>
|
|
230
|
+
<span class="ruby-comment"># has a pressure coordinate</span>
|
|
231
|
+
<span class="ruby-identifier">pcv</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">coord</span>(<span class="ruby-identifier">zdim</span>) <span class="ruby-comment"># v's p coord</span>
|
|
232
|
+
<span class="ruby-identifier">pcv_val</span> = <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">val</span>
|
|
233
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># should be NArray or NArrayMiss</span>
|
|
234
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">v_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
235
|
+
<span class="ruby-identifier">w_val</span> = <span class="ruby-identifier">w</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># should be NArray or NArrayMiss</span>
|
|
236
|
+
<span class="ruby-identifier">w_val</span> = <span class="ruby-identifier">w_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">w_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
237
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">pcv_val</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">></span> <span class="ruby-identifier">pcv_val</span>[<span class="ruby-value">-1</span>]
|
|
238
|
+
<span class="ruby-comment"># reverse the p coordinate to the increasing order</span>
|
|
239
|
+
<span class="ruby-identifier">pcv_val</span> = <span class="ruby-identifier">pcv_val</span>[<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>]
|
|
240
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v_val</span>[ *([<span class="ruby-keyword">true</span>]*<span class="ruby-identifier">zdim</span> <span class="ruby-operator">+</span> [<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>,<span class="ruby-keyword">false</span>]) ]
|
|
241
|
+
<span class="ruby-identifier">w_val</span> = <span class="ruby-identifier">w_val</span>[ *([<span class="ruby-keyword">true</span>]*<span class="ruby-identifier">zdim</span> <span class="ruby-operator">+</span> [<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>,<span class="ruby-keyword">false</span>]) ]
|
|
242
|
+
<span class="ruby-keyword">end</span>
|
|
243
|
+
|
|
244
|
+
<span class="ruby-identifier">pcv_val</span> = <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">units</span>.<span class="ruby-identifier">convert2</span>(<span class="ruby-identifier">pcv_val</span>, <span class="ruby-identifier">pascal</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">units!</span>=<span class="ruby-identifier">pascal</span>
|
|
245
|
+
<span class="ruby-identifier">pcv_over_g</span> = <span class="ruby-identifier">pcv_val</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">grav</span>
|
|
246
|
+
|
|
247
|
+
<span class="ruby-identifier">ps_val</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">val</span>
|
|
248
|
+
<span class="ruby-identifier">ps_val</span> = <span class="ruby-identifier">ps_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
249
|
+
<span class="ruby-identifier">ps_val</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">units</span>.<span class="ruby-identifier">convert2</span>(<span class="ruby-identifier">ps_val</span>, <span class="ruby-identifier">pascal</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">units!</span>=<span class="ruby-identifier">pascal</span>
|
|
250
|
+
<span class="ruby-identifier">ps_over_g</span> = <span class="ruby-identifier">ps_val</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">grav</span>
|
|
251
|
+
|
|
252
|
+
<span class="ruby-identifier">vs_val</span> = <span class="ruby-identifier">vs</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">vs</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># nil (default) or vs.val (if vs is given)</span>
|
|
253
|
+
<span class="ruby-identifier">vs_val</span> = <span class="ruby-identifier">vs_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">vs_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
254
|
+
|
|
255
|
+
<span class="ruby-identifier">ws_val</span> = <span class="ruby-identifier">ws</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">ws</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># nil (default) or ws.val (if ws is given)</span>
|
|
256
|
+
<span class="ruby-identifier">ws_val</span> = <span class="ruby-identifier">ws_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">ws_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
257
|
+
|
|
258
|
+
<span class="ruby-identifier">v_val</span>, <span class="ruby-identifier">p_over_g</span>, <span class="ruby-identifier">nzbound</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">c_cap_by_boundary</span>(<span class="ruby-identifier">v_val</span>, <span class="ruby-identifier">zdim</span>,
|
|
259
|
+
<span class="ruby-identifier">pcv_over_g</span>, <span class="ruby-keyword">true</span>, <span class="ruby-identifier">ps_over_g</span>, <span class="ruby-identifier">vs_val</span>)
|
|
260
|
+
|
|
261
|
+
<span class="ruby-identifier">w_val</span>, <span class="ruby-identifier">p_over_g</span>, <span class="ruby-identifier">nzbound</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">c_cap_by_boundary</span>(<span class="ruby-identifier">w_val</span>, <span class="ruby-identifier">zdim</span>,
|
|
262
|
+
<span class="ruby-identifier">pcv_over_g</span>, <span class="ruby-keyword">true</span>, <span class="ruby-identifier">ps_over_g</span>, <span class="ruby-identifier">ws_val</span>)
|
|
263
|
+
|
|
264
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">zdim</span> = <span class="ruby-constant">SigmaCoord</span>.<span class="ruby-identifier">find_sigma_d</span>(<span class="ruby-identifier">v</span>) <span class="ruby-comment"># substitution, not comparison</span>
|
|
265
|
+
<span class="ruby-comment"># has a sigma coordnate</span>
|
|
266
|
+
<span class="ruby-identifier">sig</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">coord</span>(<span class="ruby-identifier">zdim</span>)
|
|
267
|
+
<span class="ruby-identifier">nz</span> = <span class="ruby-identifier">sig</span>.<span class="ruby-identifier">length</span>
|
|
268
|
+
<span class="ruby-identifier">nzbound</span> = <span class="ruby-keyword">nil</span>
|
|
269
|
+
<span class="ruby-identifier">ps</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">convert_units</span>(<span class="ruby-identifier">pascal</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">units</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">pascal</span>
|
|
270
|
+
<span class="ruby-identifier">sig_val</span> = <span class="ruby-identifier">sig</span>.<span class="ruby-identifier">val</span>
|
|
271
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># should be NArray, not NArrayMiss (coz sigma)</span>
|
|
272
|
+
<span class="ruby-identifier">w_val</span> = <span class="ruby-identifier">w</span>.<span class="ruby-identifier">val</span>
|
|
273
|
+
<span class="ruby-identifier">p_over_g</span> = <span class="ruby-constant">SigmaCoord</span>.<span class="ruby-identifier">sig_ps2p</span>(<span class="ruby-identifier">ps</span>.<span class="ruby-identifier">val</span><span class="ruby-operator">/</span><span class="ruby-identifier">grav</span>, <span class="ruby-identifier">sig_val</span>, <span class="ruby-identifier">zdim</span>)
|
|
274
|
+
<span class="ruby-keyword">else</span>
|
|
275
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"v does not have a p or sigma coordinate."</span>
|
|
276
|
+
<span class="ruby-keyword">end</span>
|
|
277
|
+
|
|
278
|
+
<span class="ruby-comment">#< cumulative vertical integration ></span>
|
|
279
|
+
|
|
280
|
+
<span class="ruby-identifier">wc_val</span> = <span class="ruby-identifier">wcoord</span>.<span class="ruby-identifier">val</span>
|
|
281
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">wc_val</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">></span> <span class="ruby-identifier">wc_val</span>[<span class="ruby-value">-1</span>]
|
|
282
|
+
<span class="ruby-comment"># change it to the increasing order</span>
|
|
283
|
+
<span class="ruby-identifier">wc_val</span> = <span class="ruby-identifier">wc_val</span>[<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>]
|
|
284
|
+
<span class="ruby-identifier">wcoord</span> = <span class="ruby-identifier">wcoord</span>.<span class="ruby-identifier">copy</span>.<span class="ruby-identifier">replace_val</span>(<span class="ruby-identifier">wc_val</span>)
|
|
285
|
+
<span class="ruby-keyword">end</span>
|
|
286
|
+
|
|
287
|
+
<span class="ruby-identifier">rho_v_cum</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">c_cum_integ_irreg</span>(<span class="ruby-identifier">v_val</span>, <span class="ruby-identifier">p_over_g</span>, <span class="ruby-identifier">zdim</span>, <span class="ruby-identifier">nzbound</span>,
|
|
288
|
+
<span class="ruby-identifier">wc_val</span>, <span class="ruby-identifier">w_val</span>)
|
|
289
|
+
|
|
290
|
+
<span class="ruby-comment">#< zonal mean & latitudinal factor ></span>
|
|
291
|
+
|
|
292
|
+
<span class="ruby-identifier">lam</span>, <span class="ruby-identifier">phi</span>, <span class="ruby-identifier">lond</span>, <span class="ruby-identifier">latd</span> = <span class="ruby-constant">Planet</span>.<span class="ruby-identifier">get_lambda_phi</span>(<span class="ruby-identifier">v</span>, <span class="ruby-keyword">false</span>)
|
|
293
|
+
|
|
294
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">latd</span>.<span class="ruby-identifier">nil?</span>
|
|
295
|
+
<span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"v appears not having a latitudinal dimension"</span>)
|
|
296
|
+
<span class="ruby-keyword">end</span>
|
|
297
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">lond</span>
|
|
298
|
+
<span class="ruby-identifier">rho_v_cum</span> = <span class="ruby-identifier">rho_v_cum</span>.<span class="ruby-identifier">mean</span>(<span class="ruby-identifier">lond</span>)
|
|
299
|
+
<span class="ruby-identifier">latd</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">lond</span><span class="ruby-operator"><</span><span class="ruby-identifier">latd</span>
|
|
300
|
+
<span class="ruby-keyword">end</span>
|
|
301
|
+
|
|
302
|
+
<span class="ruby-identifier">a_cos</span> = <span class="ruby-constant">NMath</span>.<span class="ruby-identifier">cos</span>(<span class="ruby-identifier">phi</span>.<span class="ruby-identifier">val</span>) * ( <span class="ruby-value">2</span> * <span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span> * <span class="ruby-constant">Planet</span>.<span class="ruby-identifier">radius</span>.<span class="ruby-identifier">to_f</span> )
|
|
303
|
+
<span class="ruby-identifier">latd</span>.<span class="ruby-identifier">times</span>{<span class="ruby-identifier">a_cos</span>.<span class="ruby-identifier">newdim!</span>(<span class="ruby-value">0</span>)}
|
|
304
|
+
(<span class="ruby-identifier">rho_v_cum</span>.<span class="ruby-identifier">rank</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">latd</span> <span class="ruby-value">-1</span>).<span class="ruby-identifier">times</span>{<span class="ruby-identifier">a_cos</span>.<span class="ruby-identifier">newdim!</span>(<span class="ruby-value">-1</span>)}
|
|
305
|
+
|
|
306
|
+
<span class="ruby-identifier">mstrm_val</span> = <span class="ruby-identifier">rho_v_cum</span> * <span class="ruby-identifier">a_cos</span>
|
|
307
|
+
|
|
308
|
+
<span class="ruby-comment">#< make a GPhys ></span>
|
|
309
|
+
|
|
310
|
+
<span class="ruby-identifier">axes</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
|
311
|
+
<span class="ruby-keyword">for</span> <span class="ruby-identifier">d</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">v</span>.<span class="ruby-identifier">rank</span>
|
|
312
|
+
<span class="ruby-keyword">case</span> <span class="ruby-identifier">d</span>
|
|
313
|
+
<span class="ruby-keyword">when</span> <span class="ruby-identifier">lond</span>
|
|
314
|
+
<span class="ruby-comment"># lost by zonal mean</span>
|
|
315
|
+
<span class="ruby-keyword">when</span> <span class="ruby-identifier">zdim</span>
|
|
316
|
+
<span class="ruby-identifier">wax</span> = <span class="ruby-constant">Axis</span>.<span class="ruby-identifier">new</span>().<span class="ruby-identifier">set_pos</span>(<span class="ruby-identifier">wcoord</span>)
|
|
317
|
+
<span class="ruby-identifier">axes</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">wax</span>)
|
|
318
|
+
<span class="ruby-keyword">else</span>
|
|
319
|
+
<span class="ruby-identifier">axes</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">v</span>.<span class="ruby-identifier">axis</span>(<span class="ruby-identifier">d</span>).<span class="ruby-identifier">copy</span>) <span class="ruby-comment"># kept</span>
|
|
320
|
+
<span class="ruby-keyword">end</span>
|
|
321
|
+
<span class="ruby-keyword">end</span>
|
|
322
|
+
<span class="ruby-identifier">grid</span> = <span class="ruby-constant">Grid</span>.<span class="ruby-identifier">new</span>( *<span class="ruby-identifier">axes</span> )
|
|
323
|
+
|
|
324
|
+
<span class="ruby-identifier">units</span> = <span class="ruby-constant">Units</span>[<span class="ruby-string">"kg.m-1"</span>] <span class="ruby-comment"># p/g*a : Pa / (m.s-2) * m = kg.m-1</span>
|
|
325
|
+
<span class="ruby-identifier">units</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">units</span>
|
|
326
|
+
<span class="ruby-identifier">mstrm_va</span> = <span class="ruby-constant">VArray</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">mstrm_val</span>, {<span class="ruby-string">"long_name"</span>=<span class="ruby-operator">></span><span class="ruby-string">"mass stream function"</span>,
|
|
327
|
+
<span class="ruby-string">"units"</span>=<span class="ruby-operator">></span><span class="ruby-identifier">units</span>.<span class="ruby-identifier">to_s</span>}, <span class="ruby-string">"mstrm"</span>)
|
|
328
|
+
<span class="ruby-identifier">mstrm</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">grid</span>, <span class="ruby-identifier">mstrm_va</span>)
|
|
329
|
+
<span class="ruby-identifier">mstrm</span>
|
|
330
|
+
<span class="ruby-keyword">end</span></pre>
|
|
331
|
+
</div><!-- mass_strm_any-source -->
|
|
332
|
+
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
</div><!-- mass_strm_any-method -->
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
<div id="mass_strm_p-method" class="method-detail ">
|
|
342
|
+
<a name="method-i-mass_strm_p"></a>
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
<div class="method-heading">
|
|
346
|
+
<span class="method-name">mass_strm_p</span><span
|
|
347
|
+
class="method-args">(v, ps, pcoord=nil, vs=nil)</span>
|
|
348
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
349
|
+
</div>
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
<div class="method-description">
|
|
353
|
+
|
|
354
|
+
<p>Derive the mass stream function in the pressure coordinate</p>
|
|
355
|
+
|
|
356
|
+
<p>Applicable both to pressure- and sigma-coordinate input data (the output is
|
|
357
|
+
always on the pressure coordinate).</p>
|
|
358
|
+
|
|
359
|
+
<p>ARGUMENTS</p>
|
|
360
|
+
<ul><li>
|
|
361
|
+
<p>v [GPhys] : meridional wind with a vertical dimension (p or sigma) It must
|
|
362
|
+
have a latitudinal dimension too. Longitudinal and time dimensions are
|
|
363
|
+
optional. If it has a longitudinal dimension, zonal mean is taken. The
|
|
364
|
+
order of the dimensions is not restricted.</p>
|
|
365
|
+
</li><li>
|
|
366
|
+
<p>ps [GPhys] : surface pressure. Its must have the same grid as v but for the
|
|
367
|
+
vertical dimension (ps.rank must be v.rank-1)</p>
|
|
368
|
+
</li><li>
|
|
369
|
+
<p>pcoord [1D VArray](optional) : output vertical coordinate (set if nil)</p>
|
|
370
|
+
</li><li>
|
|
371
|
+
<p>vs [nil(default) or GPhys]: vs is not needed (neglected) when v has a sigma
|
|
372
|
+
coordinate. It is an optional parameter to specify the surface values of v,
|
|
373
|
+
when it is in the pressure coordinate. vs can be omitted (nil), even when v
|
|
374
|
+
has a pressure coordinate; in that case, vs is set by interpolating v if ps
|
|
375
|
+
is within the p range of v (e.g. when ps<=1000hPa), or it is naively
|
|
376
|
+
extended (using the bottom values of v) if ps is out of the range (e.g.
|
|
377
|
+
when ps>1000hPa). In other words, the current implementation assumes
|
|
378
|
+
that v is available below the surface, as is customary for reanalysis data.</p>
|
|
379
|
+
</li></ul>
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
<div class="method-source-code" id="mass_strm_p-source">
|
|
384
|
+
<pre>
|
|
385
|
+
<span class="ruby-comment"># File ../../lib/numru/ganalysis/met_z.rb, line 36</span>
|
|
386
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">mass_strm_p</span>(<span class="ruby-identifier">v</span>, <span class="ruby-identifier">ps</span>, <span class="ruby-identifier">pcoord</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">vs</span>=<span class="ruby-keyword">nil</span>)
|
|
387
|
+
|
|
388
|
+
<span class="ruby-identifier">pascal</span> = <span class="ruby-constant">Units</span>[<span class="ruby-string">"Pa"</span>]
|
|
389
|
+
<span class="ruby-identifier">grav</span> = <span class="ruby-constant">Met</span>.<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_f</span>
|
|
390
|
+
|
|
391
|
+
<span class="ruby-comment">#< consolidate the p or sigma coordinate input ></span>
|
|
392
|
+
|
|
393
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">zdim</span> = <span class="ruby-constant">Met</span>.<span class="ruby-identifier">find_prs_d</span>(<span class="ruby-identifier">v</span>) <span class="ruby-comment"># substitution, not comparison</span>
|
|
394
|
+
<span class="ruby-comment"># has a pressure coordinate</span>
|
|
395
|
+
<span class="ruby-identifier">pcv</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">coord</span>(<span class="ruby-identifier">zdim</span>) <span class="ruby-comment"># pcv is v's p coord, not pcoord from outside.</span>
|
|
396
|
+
<span class="ruby-comment"># This is used only to feed c_cap_by_boundary.</span>
|
|
397
|
+
<span class="ruby-identifier">pcoord</span> = <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">copy</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment"># if not given from outside, use pcv</span>
|
|
398
|
+
|
|
399
|
+
<span class="ruby-identifier">pcv_val</span> = <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">val</span>
|
|
400
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># should be NArray or NArrayMiss</span>
|
|
401
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">v_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
402
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">pcv_val</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">></span> <span class="ruby-identifier">pcv_val</span>[<span class="ruby-value">-1</span>]
|
|
403
|
+
<span class="ruby-comment"># reverse the p coordinate to the increasing order</span>
|
|
404
|
+
<span class="ruby-identifier">pcv_val</span> = <span class="ruby-identifier">pcv_val</span>[<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>]
|
|
405
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v_val</span>[ *([<span class="ruby-keyword">true</span>]*<span class="ruby-identifier">zdim</span> <span class="ruby-operator">+</span> [<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>,<span class="ruby-keyword">false</span>]) ]
|
|
406
|
+
<span class="ruby-keyword">end</span>
|
|
407
|
+
|
|
408
|
+
<span class="ruby-identifier">pcv_val</span> = <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">units</span>.<span class="ruby-identifier">convert2</span>(<span class="ruby-identifier">pcv_val</span>, <span class="ruby-identifier">pascal</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">pcv</span>.<span class="ruby-identifier">units!</span>=<span class="ruby-identifier">pascal</span>
|
|
409
|
+
<span class="ruby-identifier">pcv_over_g</span> = <span class="ruby-identifier">pcv_val</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">grav</span>
|
|
410
|
+
|
|
411
|
+
<span class="ruby-identifier">ps_val</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">val</span>
|
|
412
|
+
<span class="ruby-identifier">ps_val</span> = <span class="ruby-identifier">ps_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
413
|
+
<span class="ruby-identifier">ps_val</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">units</span>.<span class="ruby-identifier">convert2</span>(<span class="ruby-identifier">ps_val</span>, <span class="ruby-identifier">pascal</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">units!</span>=<span class="ruby-identifier">pascal</span>
|
|
414
|
+
<span class="ruby-identifier">ps_over_g</span> = <span class="ruby-identifier">ps_val</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">grav</span>
|
|
415
|
+
|
|
416
|
+
<span class="ruby-identifier">vs_val</span> = <span class="ruby-identifier">vs</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">vs</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># nil (default) or vs.val (if vs is given)</span>
|
|
417
|
+
<span class="ruby-identifier">vs_val</span> = <span class="ruby-identifier">vs_val</span>.<span class="ruby-identifier">to_na</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">vs_val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">NArrayMiss</span>)
|
|
418
|
+
|
|
419
|
+
<span class="ruby-identifier">v_val</span>, <span class="ruby-identifier">p_over_g</span>, <span class="ruby-identifier">nzbound</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">c_cap_by_boundary</span>(<span class="ruby-identifier">v_val</span>, <span class="ruby-identifier">zdim</span>,
|
|
420
|
+
<span class="ruby-identifier">pcv_over_g</span>, <span class="ruby-keyword">true</span>, <span class="ruby-identifier">ps_over_g</span>, <span class="ruby-identifier">vs_val</span>)
|
|
421
|
+
|
|
422
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">zdim</span> = <span class="ruby-constant">SigmaCoord</span>.<span class="ruby-identifier">find_sigma_d</span>(<span class="ruby-identifier">v</span>) <span class="ruby-comment"># substitution, not comparison</span>
|
|
423
|
+
<span class="ruby-comment"># has a sigma coordnate</span>
|
|
424
|
+
<span class="ruby-identifier">sig</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">coord</span>(<span class="ruby-identifier">zdim</span>)
|
|
425
|
+
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">pcoord</span>
|
|
426
|
+
<span class="ruby-identifier">pcoord</span> = <span class="ruby-identifier">sig</span> * <span class="ruby-value">1000</span>
|
|
427
|
+
<span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">units</span> = <span class="ruby-string">"hPa"</span>
|
|
428
|
+
<span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">name</span> = <span class="ruby-string">"p"</span>
|
|
429
|
+
<span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">long_name</span> = <span class="ruby-string">"pressure"</span>
|
|
430
|
+
<span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">put_att</span>(<span class="ruby-string">"standard_name"</span>,<span class="ruby-string">"air_pressure"</span>)
|
|
431
|
+
<span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">put_att</span>(<span class="ruby-string">"positive"</span>,<span class="ruby-string">"down"</span>)
|
|
432
|
+
<span class="ruby-keyword">end</span>
|
|
433
|
+
<span class="ruby-identifier">nz</span> = <span class="ruby-identifier">sig</span>.<span class="ruby-identifier">length</span>
|
|
434
|
+
<span class="ruby-identifier">nzbound</span> = <span class="ruby-keyword">nil</span>
|
|
435
|
+
<span class="ruby-identifier">ps</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">convert_units</span>(<span class="ruby-identifier">pascal</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">units</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">pascal</span>
|
|
436
|
+
<span class="ruby-identifier">sig_val</span> = <span class="ruby-identifier">sig</span>.<span class="ruby-identifier">val</span>
|
|
437
|
+
<span class="ruby-identifier">v_val</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">val</span> <span class="ruby-comment"># should be NArray, not NArrayMiss (coz sigma)</span>
|
|
438
|
+
<span class="ruby-identifier">p_over_g</span> = <span class="ruby-constant">SigmaCoord</span>.<span class="ruby-identifier">sig_ps2p</span>(<span class="ruby-identifier">ps</span>.<span class="ruby-identifier">val</span><span class="ruby-operator">/</span><span class="ruby-identifier">grav</span>, <span class="ruby-identifier">sig_val</span>, <span class="ruby-identifier">zdim</span>)
|
|
439
|
+
<span class="ruby-keyword">else</span>
|
|
440
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"v does not have a p or sigma coordinate."</span>
|
|
441
|
+
<span class="ruby-keyword">end</span>
|
|
442
|
+
|
|
443
|
+
<span class="ruby-comment">#< cumulative vertical integration ></span>
|
|
444
|
+
|
|
445
|
+
<span class="ruby-identifier">pc_val</span> = <span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">val</span>
|
|
446
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">pc_val</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">></span> <span class="ruby-identifier">pc_val</span>[<span class="ruby-value">-1</span>]
|
|
447
|
+
<span class="ruby-comment"># change it to the increasing order</span>
|
|
448
|
+
<span class="ruby-identifier">pc_val</span> = <span class="ruby-identifier">pc_val</span>[<span class="ruby-value">-1</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>]
|
|
449
|
+
<span class="ruby-identifier">pcoord</span> = <span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">copy</span>.<span class="ruby-identifier">replace_val</span>(<span class="ruby-identifier">pc_val</span>)
|
|
450
|
+
<span class="ruby-keyword">end</span>
|
|
451
|
+
<span class="ruby-identifier">pc_val</span> = <span class="ruby-identifier">pcoord</span>.<span class="ruby-identifier">units</span>.<span class="ruby-identifier">convert2</span>(<span class="ruby-identifier">pc_val</span>,<span class="ruby-identifier">pascal</span>)
|
|
452
|
+
|
|
453
|
+
<span class="ruby-identifier">pc_over_g</span> = <span class="ruby-identifier">pc_val</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">grav</span>
|
|
454
|
+
|
|
455
|
+
<span class="ruby-identifier">rho_v_cum</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">c_cum_integ_irreg</span>(<span class="ruby-identifier">v_val</span>, <span class="ruby-identifier">p_over_g</span>, <span class="ruby-identifier">zdim</span>, <span class="ruby-identifier">nzbound</span>,
|
|
456
|
+
<span class="ruby-identifier">pc_over_g</span>, <span class="ruby-keyword">nil</span>)
|
|
457
|
+
|
|
458
|
+
<span class="ruby-comment">#< zonal mean & latitudinal factor ></span>
|
|
459
|
+
|
|
460
|
+
<span class="ruby-identifier">lam</span>, <span class="ruby-identifier">phi</span>, <span class="ruby-identifier">lond</span>, <span class="ruby-identifier">latd</span> = <span class="ruby-constant">Planet</span>.<span class="ruby-identifier">get_lambda_phi</span>(<span class="ruby-identifier">v</span>, <span class="ruby-keyword">false</span>)
|
|
461
|
+
|
|
462
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">latd</span>.<span class="ruby-identifier">nil?</span>
|
|
463
|
+
<span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"v appears not having a latitudinal dimension"</span>)
|
|
464
|
+
<span class="ruby-keyword">end</span>
|
|
465
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">lond</span>
|
|
466
|
+
<span class="ruby-identifier">rho_v_cum</span> = <span class="ruby-identifier">rho_v_cum</span>.<span class="ruby-identifier">mean</span>(<span class="ruby-identifier">lond</span>)
|
|
467
|
+
<span class="ruby-identifier">latd</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">lond</span><span class="ruby-operator"><</span><span class="ruby-identifier">latd</span>
|
|
468
|
+
<span class="ruby-keyword">end</span>
|
|
469
|
+
|
|
470
|
+
<span class="ruby-identifier">a_cos</span> = <span class="ruby-constant">NMath</span>.<span class="ruby-identifier">cos</span>(<span class="ruby-identifier">phi</span>.<span class="ruby-identifier">val</span>) * ( <span class="ruby-value">2</span> * <span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span> * <span class="ruby-constant">Planet</span>.<span class="ruby-identifier">radius</span>.<span class="ruby-identifier">to_f</span> )
|
|
471
|
+
<span class="ruby-identifier">latd</span>.<span class="ruby-identifier">times</span>{<span class="ruby-identifier">a_cos</span>.<span class="ruby-identifier">newdim!</span>(<span class="ruby-value">0</span>)}
|
|
472
|
+
(<span class="ruby-identifier">rho_v_cum</span>.<span class="ruby-identifier">rank</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">latd</span> <span class="ruby-value">-1</span>).<span class="ruby-identifier">times</span>{<span class="ruby-identifier">a_cos</span>.<span class="ruby-identifier">newdim!</span>(<span class="ruby-value">-1</span>)}
|
|
473
|
+
|
|
474
|
+
<span class="ruby-identifier">mstrm_val</span> = <span class="ruby-identifier">rho_v_cum</span> * <span class="ruby-identifier">a_cos</span>
|
|
475
|
+
|
|
476
|
+
<span class="ruby-comment">#< make a GPhys ></span>
|
|
477
|
+
|
|
478
|
+
<span class="ruby-identifier">axes</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
|
479
|
+
<span class="ruby-keyword">for</span> <span class="ruby-identifier">d</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">v</span>.<span class="ruby-identifier">rank</span>
|
|
480
|
+
<span class="ruby-keyword">case</span> <span class="ruby-identifier">d</span>
|
|
481
|
+
<span class="ruby-keyword">when</span> <span class="ruby-identifier">lond</span>
|
|
482
|
+
<span class="ruby-comment"># lost by zonal mean</span>
|
|
483
|
+
<span class="ruby-keyword">when</span> <span class="ruby-identifier">zdim</span>
|
|
484
|
+
<span class="ruby-identifier">pax</span> = <span class="ruby-constant">Axis</span>.<span class="ruby-identifier">new</span>().<span class="ruby-identifier">set_pos</span>(<span class="ruby-identifier">pcoord</span>)
|
|
485
|
+
<span class="ruby-identifier">axes</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">pax</span>)
|
|
486
|
+
<span class="ruby-keyword">else</span>
|
|
487
|
+
<span class="ruby-identifier">axes</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">v</span>.<span class="ruby-identifier">axis</span>(<span class="ruby-identifier">d</span>).<span class="ruby-identifier">copy</span>) <span class="ruby-comment"># kept</span>
|
|
488
|
+
<span class="ruby-keyword">end</span>
|
|
489
|
+
<span class="ruby-keyword">end</span>
|
|
490
|
+
<span class="ruby-identifier">grid</span> = <span class="ruby-constant">Grid</span>.<span class="ruby-identifier">new</span>( *<span class="ruby-identifier">axes</span> )
|
|
491
|
+
|
|
492
|
+
<span class="ruby-identifier">units</span> = <span class="ruby-constant">Units</span>[<span class="ruby-string">"kg.m-1"</span>] <span class="ruby-comment"># p/g*a : Pa / (m.s-2) * m = kg.m-1</span>
|
|
493
|
+
<span class="ruby-identifier">units</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">units</span>
|
|
494
|
+
<span class="ruby-identifier">mstrm_va</span> = <span class="ruby-constant">VArray</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">mstrm_val</span>, {<span class="ruby-string">"long_name"</span>=<span class="ruby-operator">></span><span class="ruby-string">"mass stream function"</span>,
|
|
495
|
+
<span class="ruby-string">"units"</span>=<span class="ruby-operator">></span><span class="ruby-identifier">units</span>.<span class="ruby-identifier">to_s</span>}, <span class="ruby-string">"mstrm"</span>)
|
|
496
|
+
<span class="ruby-identifier">mstrm</span> = <span class="ruby-constant">GPhys</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">grid</span>, <span class="ruby-identifier">mstrm_va</span>)
|
|
497
|
+
<span class="ruby-identifier">mstrm</span>
|
|
498
|
+
<span class="ruby-keyword">end</span></pre>
|
|
499
|
+
</div><!-- mass_strm_p-source -->
|
|
500
|
+
|
|
501
|
+
</div>
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
</div><!-- mass_strm_p-method -->
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
</div><!-- public-instance-method-details -->
|
|
510
|
+
|
|
511
|
+
</div><!-- 5Buntitled-5D -->
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
</div><!-- documentation -->
|
|
515
|
+
|
|
516
|
+
<div id="validator-badges">
|
|
517
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
|
518
|
+
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
|
519
|
+
Rdoc Generator</a> 2</small>.</p>
|
|
520
|
+
</div>
|
|
521
|
+
|
|
522
|
+
</body>
|
|
523
|
+
</html>
|
|
524
|
+
|