source: CPL/oasis3-mct/branches/OASIS3-MCT_5.0_branch/doc/doxygen/html/namespacemod__oasis__reprosum.html

Last change on this file was 6331, checked in by aclsce, 17 months ago

Moved oasis-mct_5.0 in oasis3-mct/branches directory.

File size: 37.4 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6<meta name="generator" content="Doxygen 1.8.13"/>
7<meta name="viewport" content="width=device-width, initial-scale=1"/>
8<title>Oasis3-MCT: mod_oasis_reprosum Module Reference</title>
9<link href="tabs.css" rel="stylesheet" type="text/css"/>
10<script type="text/javascript" src="jquery.js"></script>
11<script type="text/javascript" src="dynsections.js"></script>
12<link href="search/search.css" rel="stylesheet" type="text/css"/>
13<script type="text/javascript" src="search/searchdata.js"></script>
14<script type="text/javascript" src="search/search.js"></script>
15<link href="doxygen.css" rel="stylesheet" type="text/css" />
16</head>
17<body>
18<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19<div id="titlearea">
20<table cellspacing="0" cellpadding="0">
21 <tbody>
22 <tr style="height: 56px;">
23  <td id="projectalign" style="padding-left: 0.5em;">
24   <div id="projectname">Oasis3-MCT
25   </div>
26  </td>
27 </tr>
28 </tbody>
29</table>
30</div>
31<!-- end header part -->
32<!-- Generated by Doxygen 1.8.13 -->
33<script type="text/javascript">
34var searchBox = new SearchBox("searchBox", "search",false,'Search');
35</script>
36<script type="text/javascript" src="menudata.js"></script>
37<script type="text/javascript" src="menu.js"></script>
38<script type="text/javascript">
39$(function() {
40  initMenu('',true,false,'search.php','Search');
41  $(document).ready(function() { init_search(); });
42});
43</script>
44<div id="main-nav"></div>
45<!-- window showing the filter options -->
46<div id="MSearchSelectWindow"
47     onmouseover="return searchBox.OnSearchSelectShow()"
48     onmouseout="return searchBox.OnSearchSelectHide()"
49     onkeydown="return searchBox.OnSearchSelectKey(event)">
50</div>
51
52<!-- iframe showing the search results (closed by default) -->
53<div id="MSearchResultsWindow">
54<iframe src="javascript:void(0)" frameborder="0" 
55        name="MSearchResults" id="MSearchResults">
56</iframe>
57</div>
58
59</div><!-- top -->
60<div class="header">
61  <div class="summary">
62<a href="#func-members">Functions/Subroutines</a> &#124;
63<a href="#var-members">Variables</a>  </div>
64  <div class="headertitle">
65<div class="title">mod_oasis_reprosum Module Reference</div>  </div>
66</div><!--header-->
67<div class="contents">
68
69<p>OASIS reproducible sum method from P. Worley. 
70<a href="#details">More...</a></p>
71<table class="memberdecls">
72<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
73Functions/Subroutines</h2></td></tr>
74<tr class="memitem:ad6b4914497a4961339a1c95bfb807660"><td class="memItemLeft" align="right" valign="top">subroutine, public&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#ad6b4914497a4961339a1c95bfb807660">oasis_reprosum_setopts</a> (repro_sum_use_ddpdd_in, repro_sum_rel_diff_max_in, repro_sum_recompute_in, repro_sum_master, repro_sum_logunit)</td></tr>
75<tr class="memdesc:ad6b4914497a4961339a1c95bfb807660"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set runtime options.  <a href="#ad6b4914497a4961339a1c95bfb807660">More...</a><br /></td></tr>
76<tr class="separator:ad6b4914497a4961339a1c95bfb807660"><td class="memSeparator" colspan="2">&#160;</td></tr>
77<tr class="memitem:a398280c78cff126b7622dbd96af675e4"><td class="memItemLeft" align="right" valign="top">subroutine, public&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a398280c78cff126b7622dbd96af675e4">oasis_reprosum_calc</a> (arr, arr_gsum, nsummands, dsummands, nflds, ddpdd_sum, arr_gbl_max, arr_gbl_max_out, arr_max_levels, arr_max_levels_out, gbl_max_nsummands, gbl_max_nsummands_out, gbl_count, repro_sum_validate, repro_sum_stats, rel_diff, commid)</td></tr>
78<tr class="memdesc:a398280c78cff126b7622dbd96af675e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the global sum of each field in "arr" using the indicated communicator with a reproducible yet scalable implementation based on a fixed point algorithm. An alternative is to use an "almost
79 always reproducible" floating point algorithm.  <a href="#a398280c78cff126b7622dbd96af675e4">More...</a><br /></td></tr>
80<tr class="separator:a398280c78cff126b7622dbd96af675e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
81<tr class="memitem:a7ea3c5bad9db10c80eb528453602aed3"><td class="memItemLeft" align="right" valign="top">subroutine&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a7ea3c5bad9db10c80eb528453602aed3">oasis_reprosum_int</a> (arr, arr_gsum, nsummands, dsummands, nflds, arr_max_shift, arr_gmax_exp, max_levels, max_level, validate, recompute, omp_nthreads, mpi_comm)</td></tr>
82<tr class="memdesc:a7ea3c5bad9db10c80eb528453602aed3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the global sum of each field in "arr" using the indicated communicator with a reproducible yet scalable implementation based on a fixed point algorithm. The accuracy of the fixed point algorithm is controlled by the number of "levels" of integer expansion, the maximum value of which is specified by max_level.  <a href="#a7ea3c5bad9db10c80eb528453602aed3">More...</a><br /></td></tr>
83<tr class="separator:a7ea3c5bad9db10c80eb528453602aed3"><td class="memSeparator" colspan="2">&#160;</td></tr>
84<tr class="memitem:a0f773341a7a6883b2f65d395a6b25b08"><td class="memItemLeft" align="right" valign="top">logical function, public&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a0f773341a7a6883b2f65d395a6b25b08">oasis_reprosum_tolexceeded</a> (name, nflds, master, logunit, rel_diff)</td></tr>
85<tr class="memdesc:a0f773341a7a6883b2f65d395a6b25b08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test whether distributed sum exceeds tolerance and print out a warning message.  <a href="#a0f773341a7a6883b2f65d395a6b25b08">More...</a><br /></td></tr>
86<tr class="separator:a0f773341a7a6883b2f65d395a6b25b08"><td class="memSeparator" colspan="2">&#160;</td></tr>
87<tr class="memitem:afe237975bf8e718f32523c3929911102"><td class="memItemLeft" align="right" valign="top">subroutine&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#afe237975bf8e718f32523c3929911102">oasis_reprosum_ddpdd</a> (arr, arr_gsum, nsummands, dsummands, nflds, mpi_comm)</td></tr>
88<tr class="memdesc:afe237975bf8e718f32523c3929911102"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the global sum of each field in "arr" using the indicated communicator with a reproducible yet scalable implementation based on He and Ding's implementation of the double-double algorithm.  <a href="#afe237975bf8e718f32523c3929911102">More...</a><br /></td></tr>
89<tr class="separator:afe237975bf8e718f32523c3929911102"><td class="memSeparator" colspan="2">&#160;</td></tr>
90<tr class="memitem:a24f9efa3ca739811888206eaf71d4690"><td class="memItemLeft" align="right" valign="top">subroutine, private&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a24f9efa3ca739811888206eaf71d4690">ddpdd</a> (dda, ddb, len, itype)</td></tr>
91<tr class="separator:a24f9efa3ca739811888206eaf71d4690"><td class="memSeparator" colspan="2">&#160;</td></tr>
92<tr class="memitem:affb09b4ec9b001bf2ebbc51feebd8004"><td class="memItemLeft" align="right" valign="top">subroutine, private&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#affb09b4ec9b001bf2ebbc51feebd8004">split_indices</a> (total, num_pieces, ibeg, iend)</td></tr>
93<tr class="separator:affb09b4ec9b001bf2ebbc51feebd8004"><td class="memSeparator" colspan="2">&#160;</td></tr>
94</table><table class="memberdecls">
95<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
96Variables</h2></td></tr>
97<tr class="memitem:a89140c250e34a903bc9aa546574988d6"><td class="memItemLeft" align="right" valign="top">logical, public&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a89140c250e34a903bc9aa546574988d6">oasis_reprosum_recompute</a> = .false.</td></tr>
98<tr class="separator:a89140c250e34a903bc9aa546574988d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
99<tr class="memitem:a6a80f4226d35d0842617e6eb6c9406e1"><td class="memItemLeft" align="right" valign="top">real(r8), public&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a6a80f4226d35d0842617e6eb6c9406e1">oasis_reprosum_reldiffmax</a> = -1.0_r8</td></tr>
100<tr class="separator:a6a80f4226d35d0842617e6eb6c9406e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
101<tr class="memitem:aab06d0de9a82726d347ac52bb276355d"><td class="memItemLeft" align="right" valign="top">logical&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#aab06d0de9a82726d347ac52bb276355d">repro_sum_use_ddpdd</a> = .false.</td></tr>
102<tr class="separator:aab06d0de9a82726d347ac52bb276355d"><td class="memSeparator" colspan="2">&#160;</td></tr>
103<tr class="memitem:a48a084c213295b9eaa78c0552a10741a"><td class="memItemLeft" align="right" valign="top">logical&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemod__oasis__reprosum.html#a48a084c213295b9eaa78c0552a10741a">detailed_timing</a> = .false.</td></tr>
104<tr class="separator:a48a084c213295b9eaa78c0552a10741a"><td class="memSeparator" colspan="2">&#160;</td></tr>
105</table>
106<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
107<div class="textblock"><p>OASIS reproducible sum method from P. Worley. </p>
108</div><h2 class="groupheader">Function/Subroutine Documentation</h2>
109<a id="a24f9efa3ca739811888206eaf71d4690"></a>
110<h2 class="memtitle"><span class="permalink"><a href="#a24f9efa3ca739811888206eaf71d4690">&#9670;&nbsp;</a></span>ddpdd()</h2>
111
112<div class="memitem">
113<div class="memproto">
114<table class="mlabels">
115  <tr>
116  <td class="mlabels-left">
117      <table class="memname">
118        <tr>
119          <td class="memname">subroutine, private mod_oasis_reprosum::ddpdd </td>
120          <td>(</td>
121          <td class="paramtype">complex(r8), dimension(len), intent(in)&#160;</td>
122          <td class="paramname"><em>dda</em>, </td>
123        </tr>
124        <tr>
125          <td class="paramkey"></td>
126          <td></td>
127          <td class="paramtype">complex(r8), dimension(len), intent(inout)&#160;</td>
128          <td class="paramname"><em>ddb</em>, </td>
129        </tr>
130        <tr>
131          <td class="paramkey"></td>
132          <td></td>
133          <td class="paramtype">integer, intent(in)&#160;</td>
134          <td class="paramname"><em>len</em>, </td>
135        </tr>
136        <tr>
137          <td class="paramkey"></td>
138          <td></td>
139          <td class="paramtype">integer, intent(in)&#160;</td>
140          <td class="paramname"><em>itype</em>&#160;</td>
141        </tr>
142        <tr>
143          <td></td>
144          <td>)</td>
145          <td></td><td></td>
146        </tr>
147      </table>
148  </td>
149  <td class="mlabels-right">
150<span class="mlabels"><span class="mlabel">private</span></span>  </td>
151  </tr>
152</table>
153</div><div class="memdoc">
154
155<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l01354">1354</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
156
157</div>
158</div>
159<a id="a398280c78cff126b7622dbd96af675e4"></a>
160<h2 class="memtitle"><span class="permalink"><a href="#a398280c78cff126b7622dbd96af675e4">&#9670;&nbsp;</a></span>oasis_reprosum_calc()</h2>
161
162<div class="memitem">
163<div class="memproto">
164      <table class="memname">
165        <tr>
166          <td class="memname">subroutine, public mod_oasis_reprosum::oasis_reprosum_calc </td>
167          <td>(</td>
168          <td class="paramtype">real(r8), dimension(dsummands,nflds), intent(in)&#160;</td>
169          <td class="paramname"><em>arr</em>, </td>
170        </tr>
171        <tr>
172          <td class="paramkey"></td>
173          <td></td>
174          <td class="paramtype">real(r8), dimension(nflds), intent(out)&#160;</td>
175          <td class="paramname"><em>arr_gsum</em>, </td>
176        </tr>
177        <tr>
178          <td class="paramkey"></td>
179          <td></td>
180          <td class="paramtype">integer, intent(in)&#160;</td>
181          <td class="paramname"><em>nsummands</em>, </td>
182        </tr>
183        <tr>
184          <td class="paramkey"></td>
185          <td></td>
186          <td class="paramtype">integer, intent(in)&#160;</td>
187          <td class="paramname"><em>dsummands</em>, </td>
188        </tr>
189        <tr>
190          <td class="paramkey"></td>
191          <td></td>
192          <td class="paramtype">integer, intent(in)&#160;</td>
193          <td class="paramname"><em>nflds</em>, </td>
194        </tr>
195        <tr>
196          <td class="paramkey"></td>
197          <td></td>
198          <td class="paramtype">logical, intent(in), optional&#160;</td>
199          <td class="paramname"><em>ddpdd_sum</em>, </td>
200        </tr>
201        <tr>
202          <td class="paramkey"></td>
203          <td></td>
204          <td class="paramtype">real(r8), dimension(nflds), intent(in), optional&#160;</td>
205          <td class="paramname"><em>arr_gbl_max</em>, </td>
206        </tr>
207        <tr>
208          <td class="paramkey"></td>
209          <td></td>
210          <td class="paramtype">real(r8), dimension(nflds), intent(out), optional&#160;</td>
211          <td class="paramname"><em>arr_gbl_max_out</em>, </td>
212        </tr>
213        <tr>
214          <td class="paramkey"></td>
215          <td></td>
216          <td class="paramtype">integer, dimension(nflds), intent(in), optional&#160;</td>
217          <td class="paramname"><em>arr_max_levels</em>, </td>
218        </tr>
219        <tr>
220          <td class="paramkey"></td>
221          <td></td>
222          <td class="paramtype">integer, dimension(nflds), intent(out), optional&#160;</td>
223          <td class="paramname"><em>arr_max_levels_out</em>, </td>
224        </tr>
225        <tr>
226          <td class="paramkey"></td>
227          <td></td>
228          <td class="paramtype">integer, intent(in), optional&#160;</td>
229          <td class="paramname"><em>gbl_max_nsummands</em>, </td>
230        </tr>
231        <tr>
232          <td class="paramkey"></td>
233          <td></td>
234          <td class="paramtype">integer, intent(out), optional&#160;</td>
235          <td class="paramname"><em>gbl_max_nsummands_out</em>, </td>
236        </tr>
237        <tr>
238          <td class="paramkey"></td>
239          <td></td>
240          <td class="paramtype">integer, intent(in), optional&#160;</td>
241          <td class="paramname"><em>gbl_count</em>, </td>
242        </tr>
243        <tr>
244          <td class="paramkey"></td>
245          <td></td>
246          <td class="paramtype">logical, intent(in), optional&#160;</td>
247          <td class="paramname"><em>repro_sum_validate</em>, </td>
248        </tr>
249        <tr>
250          <td class="paramkey"></td>
251          <td></td>
252          <td class="paramtype">integer, dimension(5), intent(inout), optional&#160;</td>
253          <td class="paramname"><em>repro_sum_stats</em>, </td>
254        </tr>
255        <tr>
256          <td class="paramkey"></td>
257          <td></td>
258          <td class="paramtype">real(r8), dimension(2,nflds), intent(out), optional&#160;</td>
259          <td class="paramname"><em>rel_diff</em>, </td>
260        </tr>
261        <tr>
262          <td class="paramkey"></td>
263          <td></td>
264          <td class="paramtype">integer, intent(in), optional&#160;</td>
265          <td class="paramname"><em>commid</em>&#160;</td>
266        </tr>
267        <tr>
268          <td></td>
269          <td>)</td>
270          <td></td><td></td>
271        </tr>
272      </table>
273</div><div class="memdoc">
274
275<p>Compute the global sum of each field in "arr" using the indicated communicator with a reproducible yet scalable implementation based on a fixed point algorithm. An alternative is to use an "almost
276 always reproducible" floating point algorithm. </p>
277<dl class="params"><dt>Parameters</dt><dd>
278  <table class="params">
279    <tr><td class="paramdir">[in]</td><td class="paramname">nsummands</td><td>number of local summands</td></tr>
280    <tr><td class="paramdir">[in]</td><td class="paramname">dsummands</td><td>declared first dimension</td></tr>
281    <tr><td class="paramdir">[in]</td><td class="paramname">nflds</td><td>number of fields</td></tr>
282    <tr><td class="paramdir">[in]</td><td class="paramname">arr</td><td>input array</td></tr>
283    <tr><td class="paramdir">[out]</td><td class="paramname">arr_gsum</td><td>global means</td></tr>
284    <tr><td class="paramdir">[in]</td><td class="paramname">ddpdd_sum</td><td>use ddpdd algorithm instead of fixed precision algorithm</td></tr>
285    <tr><td class="paramdir">[in]</td><td class="paramname">arr_gbl_max</td><td>upper bound on max(abs(arr))</td></tr>
286    <tr><td class="paramdir">[out]</td><td class="paramname">arr_gbl_max_out</td><td>calculated upper bound on max(abs(arr))</td></tr>
287    <tr><td class="paramdir">[in]</td><td class="paramname">arr_max_levels</td><td>maximum number of levels of integer expansion to use</td></tr>
288    <tr><td class="paramdir">[out]</td><td class="paramname">arr_max_levels_out</td><td>output of number of levels of integer expansion to used</td></tr>
289    <tr><td class="paramdir">[in]</td><td class="paramname">gbl_max_nsummands</td><td>maximum of nsummand over all processes</td></tr>
290    <tr><td class="paramdir">[out]</td><td class="paramname">gbl_max_nsummands_out</td><td>calculated maximum nsummands over all processes</td></tr>
291    <tr><td class="paramdir">[in]</td><td class="paramname">gbl_count</td><td>was total number of summands; now is ignored; use gbl_max_nsummands instead</td></tr>
292    <tr><td class="paramdir">[in]</td><td class="paramname">repro_sum_validate</td><td>flag enabling/disabling testing that gmax and max_levels are accurate/sufficient. Default is enabled.</td></tr>
293    <tr><td class="paramdir">[in,out]</td><td class="paramname">repro_sum_stats</td><td>increment running totals for (1) one-reduction repro_sum (2) two-reduction repro_sum (3) both types in one call (4) nonrepro_sum (5) global max nsummands reduction</td></tr>
294    <tr><td class="paramdir">[out]</td><td class="paramname">rel_diff</td><td>relative and absolute differences between fixed and floating point sums</td></tr>
295    <tr><td class="paramdir">[in]</td><td class="paramname">commid</td><td>MPI communicator </td></tr>
296  </table>
297  </dd>
298</dl>
299
300<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00267">267</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
301
302</div>
303</div>
304<a id="afe237975bf8e718f32523c3929911102"></a>
305<h2 class="memtitle"><span class="permalink"><a href="#afe237975bf8e718f32523c3929911102">&#9670;&nbsp;</a></span>oasis_reprosum_ddpdd()</h2>
306
307<div class="memitem">
308<div class="memproto">
309<table class="mlabels">
310  <tr>
311  <td class="mlabels-left">
312      <table class="memname">
313        <tr>
314          <td class="memname">subroutine mod_oasis_reprosum::oasis_reprosum_ddpdd </td>
315          <td>(</td>
316          <td class="paramtype">real(r8), dimension(dsummands,nflds), intent(in)&#160;</td>
317          <td class="paramname"><em>arr</em>, </td>
318        </tr>
319        <tr>
320          <td class="paramkey"></td>
321          <td></td>
322          <td class="paramtype">real(r8), dimension(nflds), intent(out)&#160;</td>
323          <td class="paramname"><em>arr_gsum</em>, </td>
324        </tr>
325        <tr>
326          <td class="paramkey"></td>
327          <td></td>
328          <td class="paramtype">integer, intent(in)&#160;</td>
329          <td class="paramname"><em>nsummands</em>, </td>
330        </tr>
331        <tr>
332          <td class="paramkey"></td>
333          <td></td>
334          <td class="paramtype">integer, intent(in)&#160;</td>
335          <td class="paramname"><em>dsummands</em>, </td>
336        </tr>
337        <tr>
338          <td class="paramkey"></td>
339          <td></td>
340          <td class="paramtype">integer, intent(in)&#160;</td>
341          <td class="paramname"><em>nflds</em>, </td>
342        </tr>
343        <tr>
344          <td class="paramkey"></td>
345          <td></td>
346          <td class="paramtype">integer, intent(in)&#160;</td>
347          <td class="paramname"><em>mpi_comm</em>&#160;</td>
348        </tr>
349        <tr>
350          <td></td>
351          <td>)</td>
352          <td></td><td></td>
353        </tr>
354      </table>
355  </td>
356  <td class="mlabels-right">
357<span class="mlabels"><span class="mlabel">private</span></span>  </td>
358  </tr>
359</table>
360</div><div class="memdoc">
361
362<p>Compute the global sum of each field in "arr" using the indicated communicator with a reproducible yet scalable implementation based on He and Ding's implementation of the double-double algorithm. </p>
363<dl class="params"><dt>Parameters</dt><dd>
364  <table class="params">
365    <tr><td class="paramdir">[in]</td><td class="paramname">nsummands</td><td>number of local summands</td></tr>
366    <tr><td class="paramdir">[in]</td><td class="paramname">dsummands</td><td>declared first dimension</td></tr>
367    <tr><td class="paramdir">[in]</td><td class="paramname">nflds</td><td>number of fields</td></tr>
368    <tr><td class="paramdir">[in]</td><td class="paramname">arr</td><td>input array</td></tr>
369    <tr><td class="paramdir">[in]</td><td class="paramname">mpi_comm</td><td>MPI subcommunicator</td></tr>
370    <tr><td class="paramdir">[out]</td><td class="paramname">arr_gsum</td><td>global sums </td></tr>
371  </table>
372  </dd>
373</dl>
374
375<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l01281">1281</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
376
377</div>
378</div>
379<a id="a7ea3c5bad9db10c80eb528453602aed3"></a>
380<h2 class="memtitle"><span class="permalink"><a href="#a7ea3c5bad9db10c80eb528453602aed3">&#9670;&nbsp;</a></span>oasis_reprosum_int()</h2>
381
382<div class="memitem">
383<div class="memproto">
384<table class="mlabels">
385  <tr>
386  <td class="mlabels-left">
387      <table class="memname">
388        <tr>
389          <td class="memname">subroutine mod_oasis_reprosum::oasis_reprosum_int </td>
390          <td>(</td>
391          <td class="paramtype">real(r8), dimension(dsummands,nflds), intent(in)&#160;</td>
392          <td class="paramname"><em>arr</em>, </td>
393        </tr>
394        <tr>
395          <td class="paramkey"></td>
396          <td></td>
397          <td class="paramtype">real(r8), dimension(nflds), intent(out)&#160;</td>
398          <td class="paramname"><em>arr_gsum</em>, </td>
399        </tr>
400        <tr>
401          <td class="paramkey"></td>
402          <td></td>
403          <td class="paramtype">integer, intent(in)&#160;</td>
404          <td class="paramname"><em>nsummands</em>, </td>
405        </tr>
406        <tr>
407          <td class="paramkey"></td>
408          <td></td>
409          <td class="paramtype">integer, intent(in)&#160;</td>
410          <td class="paramname"><em>dsummands</em>, </td>
411        </tr>
412        <tr>
413          <td class="paramkey"></td>
414          <td></td>
415          <td class="paramtype">integer, intent(in)&#160;</td>
416          <td class="paramname"><em>nflds</em>, </td>
417        </tr>
418        <tr>
419          <td class="paramkey"></td>
420          <td></td>
421          <td class="paramtype">integer, intent(in)&#160;</td>
422          <td class="paramname"><em>arr_max_shift</em>, </td>
423        </tr>
424        <tr>
425          <td class="paramkey"></td>
426          <td></td>
427          <td class="paramtype">integer, dimension(nflds), intent(in)&#160;</td>
428          <td class="paramname"><em>arr_gmax_exp</em>, </td>
429        </tr>
430        <tr>
431          <td class="paramkey"></td>
432          <td></td>
433          <td class="paramtype">integer, dimension(nflds), intent(in)&#160;</td>
434          <td class="paramname"><em>max_levels</em>, </td>
435        </tr>
436        <tr>
437          <td class="paramkey"></td>
438          <td></td>
439          <td class="paramtype">integer, intent(in)&#160;</td>
440          <td class="paramname"><em>max_level</em>, </td>
441        </tr>
442        <tr>
443          <td class="paramkey"></td>
444          <td></td>
445          <td class="paramtype">logical, intent(in)&#160;</td>
446          <td class="paramname"><em>validate</em>, </td>
447        </tr>
448        <tr>
449          <td class="paramkey"></td>
450          <td></td>
451          <td class="paramtype">logical, intent(out)&#160;</td>
452          <td class="paramname"><em>recompute</em>, </td>
453        </tr>
454        <tr>
455          <td class="paramkey"></td>
456          <td></td>
457          <td class="paramtype">integer, intent(in)&#160;</td>
458          <td class="paramname"><em>omp_nthreads</em>, </td>
459        </tr>
460        <tr>
461          <td class="paramkey"></td>
462          <td></td>
463          <td class="paramtype">integer, intent(in)&#160;</td>
464          <td class="paramname"><em>mpi_comm</em>&#160;</td>
465        </tr>
466        <tr>
467          <td></td>
468          <td>)</td>
469          <td></td><td></td>
470        </tr>
471      </table>
472  </td>
473  <td class="mlabels-right">
474<span class="mlabels"><span class="mlabel">private</span></span>  </td>
475  </tr>
476</table>
477</div><div class="memdoc">
478
479<p>Compute the global sum of each field in "arr" using the indicated communicator with a reproducible yet scalable implementation based on a fixed point algorithm. The accuracy of the fixed point algorithm is controlled by the number of "levels" of integer expansion, the maximum value of which is specified by max_level. </p>
480<dl class="params"><dt>Parameters</dt><dd>
481  <table class="params">
482    <tr><td class="paramdir">[in]</td><td class="paramname">nsummands</td><td>number of local summands</td></tr>
483    <tr><td class="paramdir">[in]</td><td class="paramname">dsummands</td><td>declared first dimension</td></tr>
484    <tr><td class="paramdir">[in]</td><td class="paramname">nflds</td><td>number of fields</td></tr>
485    <tr><td class="paramdir">[in]</td><td class="paramname">arr_max_shift</td><td>maximum safe exponent for value &lt; 1 (so that sum does not overflow)</td></tr>
486    <tr><td class="paramdir">[in]</td><td class="paramname">arr_gmax_exp</td><td>exponents of global maxima</td></tr>
487    <tr><td class="paramdir">[in]</td><td class="paramname">max_levels</td><td>maximum number of levels of integer expansion</td></tr>
488    <tr><td class="paramdir">[in]</td><td class="paramname">max_level</td><td>maximum value in max_levels</td></tr>
489    <tr><td class="paramdir">[in]</td><td class="paramname">omp_nthreads</td><td>number of OpenMP threads</td></tr>
490    <tr><td class="paramdir">[in]</td><td class="paramname">mpi_comm</td><td>MPI subcommunicator</td></tr>
491    <tr><td class="paramdir">[in]</td><td class="paramname">arr</td><td>input array</td></tr>
492    <tr><td class="paramdir">[in]</td><td class="paramname">validate</td><td>flag indicating that accuracy of solution generated from arr_gmax_exp and max_levels should be tested</td></tr>
493    <tr><td class="paramdir">[out]</td><td class="paramname">recompute</td><td>flag indicating that either the upper bounds are inaccurate, or max_levels and arr_gmax_exp do not generate accurate enough sums</td></tr>
494    <tr><td class="paramdir">[out]</td><td class="paramname">arr_gsum</td><td>global means </td></tr>
495  </table>
496  </dd>
497</dl>
498
499<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00751">751</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
500
501</div>
502</div>
503<a id="ad6b4914497a4961339a1c95bfb807660"></a>
504<h2 class="memtitle"><span class="permalink"><a href="#ad6b4914497a4961339a1c95bfb807660">&#9670;&nbsp;</a></span>oasis_reprosum_setopts()</h2>
505
506<div class="memitem">
507<div class="memproto">
508      <table class="memname">
509        <tr>
510          <td class="memname">subroutine, public mod_oasis_reprosum::oasis_reprosum_setopts </td>
511          <td>(</td>
512          <td class="paramtype">logical, intent(in), optional&#160;</td>
513          <td class="paramname"><em>repro_sum_use_ddpdd_in</em>, </td>
514        </tr>
515        <tr>
516          <td class="paramkey"></td>
517          <td></td>
518          <td class="paramtype">real(r8), intent(in), optional&#160;</td>
519          <td class="paramname"><em>repro_sum_rel_diff_max_in</em>, </td>
520        </tr>
521        <tr>
522          <td class="paramkey"></td>
523          <td></td>
524          <td class="paramtype">logical, intent(in), optional&#160;</td>
525          <td class="paramname"><em>repro_sum_recompute_in</em>, </td>
526        </tr>
527        <tr>
528          <td class="paramkey"></td>
529          <td></td>
530          <td class="paramtype">logical, intent(in), optional&#160;</td>
531          <td class="paramname"><em>repro_sum_master</em>, </td>
532        </tr>
533        <tr>
534          <td class="paramkey"></td>
535          <td></td>
536          <td class="paramtype">integer, intent(in), optional&#160;</td>
537          <td class="paramname"><em>repro_sum_logunit</em>&#160;</td>
538        </tr>
539        <tr>
540          <td></td>
541          <td>)</td>
542          <td></td><td></td>
543        </tr>
544      </table>
545</div><div class="memdoc">
546
547<p>Set runtime options. </p>
548<dl class="params"><dt>Parameters</dt><dd>
549  <table class="params">
550    <tr><td class="paramdir">[in]</td><td class="paramname">repro_sum_use_ddpdd_in</td><td>Use DDPDD algorithm instead of fixed precision algorithm</td></tr>
551    <tr><td class="paramdir">[in]</td><td class="paramname">repro_sum_rel_diff_max_in</td><td>maximum permissible difference between reproducible and nonreproducible sums</td></tr>
552    <tr><td class="paramdir">[in]</td><td class="paramname">repro_sum_recompute_in</td><td>recompute using different algorithm when difference between reproducible and nonreproducible sums is too great</td></tr>
553    <tr><td class="paramdir">[in]</td><td class="paramname">repro_sum_master</td><td>flag indicating whether this process should output log messages</td></tr>
554    <tr><td class="paramdir">[in]</td><td class="paramname">repro_sum_logunit</td><td>unit number for log messages </td></tr>
555  </table>
556  </dd>
557</dl>
558
559<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00105">105</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
560
561</div>
562</div>
563<a id="a0f773341a7a6883b2f65d395a6b25b08"></a>
564<h2 class="memtitle"><span class="permalink"><a href="#a0f773341a7a6883b2f65d395a6b25b08">&#9670;&nbsp;</a></span>oasis_reprosum_tolexceeded()</h2>
565
566<div class="memitem">
567<div class="memproto">
568      <table class="memname">
569        <tr>
570          <td class="memname">logical function, public mod_oasis_reprosum::oasis_reprosum_tolexceeded </td>
571          <td>(</td>
572          <td class="paramtype">character(len=*), intent(in)&#160;</td>
573          <td class="paramname"><em>name</em>, </td>
574        </tr>
575        <tr>
576          <td class="paramkey"></td>
577          <td></td>
578          <td class="paramtype">integer, intent(in)&#160;</td>
579          <td class="paramname"><em>nflds</em>, </td>
580        </tr>
581        <tr>
582          <td class="paramkey"></td>
583          <td></td>
584          <td class="paramtype">logical, intent(in)&#160;</td>
585          <td class="paramname"><em>master</em>, </td>
586        </tr>
587        <tr>
588          <td class="paramkey"></td>
589          <td></td>
590          <td class="paramtype">integer, intent(in), optional&#160;</td>
591          <td class="paramname"><em>logunit</em>, </td>
592        </tr>
593        <tr>
594          <td class="paramkey"></td>
595          <td></td>
596          <td class="paramtype">real(r8), dimension(2,nflds), intent(in)&#160;</td>
597          <td class="paramname"><em>rel_diff</em>&#160;</td>
598        </tr>
599        <tr>
600          <td></td>
601          <td>)</td>
602          <td></td><td></td>
603        </tr>
604      </table>
605</div><div class="memdoc">
606
607<p>Test whether distributed sum exceeds tolerance and print out a warning message. </p>
608<dl class="params"><dt>Parameters</dt><dd>
609  <table class="params">
610    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>distributed sum identifier</td></tr>
611    <tr><td class="paramdir">[in]</td><td class="paramname">nflds</td><td>number of fields</td></tr>
612    <tr><td class="paramdir">[in]</td><td class="paramname">master</td><td>process that will write warning messages?</td></tr>
613    <tr><td class="paramdir">[in]</td><td class="paramname">logunit</td><td>unit warning messages written to</td></tr>
614    <tr><td class="paramdir">[in]</td><td class="paramname">rel_diff</td><td>relative and absolute differences between fixed and floating point sums </td></tr>
615  </table>
616  </dd>
617</dl>
618
619<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l01195">1195</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
620
621</div>
622</div>
623<a id="affb09b4ec9b001bf2ebbc51feebd8004"></a>
624<h2 class="memtitle"><span class="permalink"><a href="#affb09b4ec9b001bf2ebbc51feebd8004">&#9670;&nbsp;</a></span>split_indices()</h2>
625
626<div class="memitem">
627<div class="memproto">
628<table class="mlabels">
629  <tr>
630  <td class="mlabels-left">
631      <table class="memname">
632        <tr>
633          <td class="memname">subroutine, private mod_oasis_reprosum::split_indices </td>
634          <td>(</td>
635          <td class="paramtype">integer, intent(in)&#160;</td>
636          <td class="paramname"><em>total</em>, </td>
637        </tr>
638        <tr>
639          <td class="paramkey"></td>
640          <td></td>
641          <td class="paramtype">integer, intent(in)&#160;</td>
642          <td class="paramname"><em>num_pieces</em>, </td>
643        </tr>
644        <tr>
645          <td class="paramkey"></td>
646          <td></td>
647          <td class="paramtype">integer, dimension(num_pieces), intent(out)&#160;</td>
648          <td class="paramname"><em>ibeg</em>, </td>
649        </tr>
650        <tr>
651          <td class="paramkey"></td>
652          <td></td>
653          <td class="paramtype">integer, dimension(num_pieces), intent(out)&#160;</td>
654          <td class="paramname"><em>iend</em>&#160;</td>
655        </tr>
656        <tr>
657          <td></td>
658          <td>)</td>
659          <td></td><td></td>
660        </tr>
661      </table>
662  </td>
663  <td class="mlabels-right">
664<span class="mlabels"><span class="mlabel">private</span></span>  </td>
665  </tr>
666</table>
667</div><div class="memdoc">
668
669<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l01394">1394</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
670
671</div>
672</div>
673<h2 class="groupheader">Variable Documentation</h2>
674<a id="a48a084c213295b9eaa78c0552a10741a"></a>
675<h2 class="memtitle"><span class="permalink"><a href="#a48a084c213295b9eaa78c0552a10741a">&#9670;&nbsp;</a></span>detailed_timing</h2>
676
677<div class="memitem">
678<div class="memproto">
679<table class="mlabels">
680  <tr>
681  <td class="mlabels-left">
682      <table class="memname">
683        <tr>
684          <td class="memname">logical mod_oasis_reprosum::detailed_timing = .false.</td>
685        </tr>
686      </table>
687  </td>
688  <td class="mlabels-right">
689<span class="mlabels"><span class="mlabel">private</span></span>  </td>
690  </tr>
691</table>
692</div><div class="memdoc">
693
694<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00089">89</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
695
696</div>
697</div>
698<a id="a89140c250e34a903bc9aa546574988d6"></a>
699<h2 class="memtitle"><span class="permalink"><a href="#a89140c250e34a903bc9aa546574988d6">&#9670;&nbsp;</a></span>oasis_reprosum_recompute</h2>
700
701<div class="memitem">
702<div class="memproto">
703      <table class="memname">
704        <tr>
705          <td class="memname">logical, public mod_oasis_reprosum::oasis_reprosum_recompute = .false.</td>
706        </tr>
707      </table>
708</div><div class="memdoc">
709
710<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00073">73</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
711
712</div>
713</div>
714<a id="a6a80f4226d35d0842617e6eb6c9406e1"></a>
715<h2 class="memtitle"><span class="permalink"><a href="#a6a80f4226d35d0842617e6eb6c9406e1">&#9670;&nbsp;</a></span>oasis_reprosum_reldiffmax</h2>
716
717<div class="memitem">
718<div class="memproto">
719      <table class="memname">
720        <tr>
721          <td class="memname">real(r8), public mod_oasis_reprosum::oasis_reprosum_reldiffmax = -1.0_r8</td>
722        </tr>
723      </table>
724</div><div class="memdoc">
725
726<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00075">75</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
727
728</div>
729</div>
730<a id="aab06d0de9a82726d347ac52bb276355d"></a>
731<h2 class="memtitle"><span class="permalink"><a href="#aab06d0de9a82726d347ac52bb276355d">&#9670;&nbsp;</a></span>repro_sum_use_ddpdd</h2>
732
733<div class="memitem">
734<div class="memproto">
735<table class="mlabels">
736  <tr>
737  <td class="mlabels-left">
738      <table class="memname">
739        <tr>
740          <td class="memname">logical mod_oasis_reprosum::repro_sum_use_ddpdd = .false.</td>
741        </tr>
742      </table>
743  </td>
744  <td class="mlabels-right">
745<span class="mlabels"><span class="mlabel">private</span></span>  </td>
746  </tr>
747</table>
748</div><div class="memdoc">
749
750<p class="definition">Definition at line <a class="el" href="mod__oasis__reprosum_8_f90_source.html#l00088">88</a> of file <a class="el" href="mod__oasis__reprosum_8_f90_source.html">mod_oasis_reprosum.F90</a>.</p>
751
752</div>
753</div>
754</div><!-- contents -->
755<!-- start footer part -->
756<hr class="footer"/><address class="footer"><small>
757Generated on Fri Jun 29 2018 20:52:30 for Oasis3-MCT by &#160;<a href="http://www.doxygen.org/index.html">
758<img class="footer" src="doxygen.png" alt="doxygen"/>
759</a> 1.8.13
760</small></address>
761</body>
762</html>
Note: See TracBrowser for help on using the repository browser.