You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
psblas3/docs/html/userhtmlsu5.html

815 lines
34 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html >
<head><title>Descriptor data structure</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)">
<!-- html,3 -->
<meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 48--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu9.html" >next</a>] [<a
href="#tailuserhtmlsu5.html">tail</a>] [<a
href="userhtmlsu7.html#userhtmlsu8.html" >up</a>] </p></div>
<h4 class="subsectionHead"><span class="titlemark">3.1 </span> <a
id="x13-100003.1"></a>Descriptor data structure</h4>
<!--l. 50--><p class="noindent" >All the general matrix informations and elements to be exchanged among processes
are stored within a data structure of the type <a
id="descdata"><span
class="cmtt-10">psb</span><span
class="cmtt-10">_desc</span><span
class="cmtt-10">_type</span></a>. Every structure of this
type is associated with a discretization pattern and enables data communications and
other operations that are necessary for implementing the various algorithms of
interest to us.
<!--l. 57--><p class="indent" > The data structure itself <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_desc_type</span></span></span> can be treated as an opaque object
handled via the tools routines of Sec.&#x00A0;<a
href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a> or the query routines detailed below;
nevertheless we include here a description for the curious reader.
<!--l. 63--><p class="indent" > First we describe the <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_indx_map</span></span></span> type. This is a data structure that keeps
track of a certain number of basic issues such as:
<ul class="itemize1">
<li class="itemize">The value of the communication/MPI context;
</li>
<li class="itemize">The number of indices in the index space, i.e. global number of rows and
columns of a sparse matrix;
</li>
<li class="itemize">The local set of indices, including:
<ul class="itemize2">
<li class="itemize">The number of local indices (and local rows);
</li>
<li class="itemize">The number of halo indices (and therefore local columns);
</li>
<li class="itemize">The global indices corresponding to the local ones.</li></ul>
</li></ul>
<!--l. 77--><p class="noindent" >There are many different schemes for storing these data; therefore there are a number of
types extending the base one, and the descriptor structure holds a polymorphic
object whose dynamic type can be any of the extended types. The methods
associated with this data type answer the following queries:
<ul class="itemize1">
<li class="itemize">For a given set of local indices, find the corresponding indices in the global
numbering;
</li>
<li class="itemize">For a given set of global indices, find the corresponding indices in the local
numbering, if any, or return an invalid
</li>
<li class="itemize">Add a global index to the set of halo indices;
</li>
<li class="itemize">Find the process owner of each member of a set of global indices.</li></ul>
<!--l. 92--><p class="noindent" >All methods but the last are purely local; the last method potentially requires
communication among processes, and thus is a synchronous method. The
choice of a specific dynamic type for the index map is made at the time the
descriptor is initially allocated, according to the mode of initialization (see
also&#x00A0;<a
href="userhtmlse6.html#x40-770006">6<!--tex4ht:ref: sec:toolsrout --></a>).
<!--l. 98--><p class="indent" > The descriptor contents are as follows:
<dl class="description"><dt class="description">
<span
class="cmbx-10">indxmap</span> </dt><dd
class="description">A polymorphic variable of a type that is any extension of the
indx_map type described above. <br
class="newline" />
</dd><dt class="description">
<span
class="cmbx-10">halo</span><span
class="cmbx-10">_index</span> </dt><dd
class="description">A list of the halo and boundary elements for the current process to be
exchanged with other processes; for each processes with which it is necessary to
communicate:
<ol class="enumerate1" >
<li
class="enumerate" id="x13-10002x1">Process identifier;
</li>
<li
class="enumerate" id="x13-10004x2">Number of points to be received;
</li>
<li
class="enumerate" id="x13-10006x3">Indices of points to be received;
</li>
<li
class="enumerate" id="x13-10008x4">Number of points to be sent;
</li>
<li
class="enumerate" id="x13-10010x5">Indices of points to be sent;</li></ol>
<!--l. 114--><p class="noindent" >Specified as: a vector of integer type, see&#x00A0;<a
href="userhtmlsu7.html#x15-460003.3">3.3<!--tex4ht:ref: sec:vecttype --></a>.
</dd><dt class="description">
<span
class="cmbx-10">ext</span><span
class="cmbx-10">_index</span> </dt><dd
class="description">A list of element indices to be exchanged to implement the mapping
between a base descriptor and a descriptor with overlap. <br
class="newline" />Specified as: a vector of integer type, see&#x00A0;<a
href="userhtmlsu7.html#x15-460003.3">3.3<!--tex4ht:ref: sec:vecttype --></a>.
</dd><dt class="description">
<span
class="cmbx-10">ovrlap</span><span
class="cmbx-10">_index</span> </dt><dd
class="description">A list of the overlap elements for the current process, organized in
groups like the previous vector:
<ol class="enumerate1" >
<li
class="enumerate" id="x13-10012x1">Process identifier;
</li>
<li
class="enumerate" id="x13-10014x2">Number of points to be received;
</li>
<li
class="enumerate" id="x13-10016x3">Indices of points to be received;
</li>
<li
class="enumerate" id="x13-10018x4">Number of points to be sent;
</li>
<li
class="enumerate" id="x13-10020x5">Indices of points to be sent;</li></ol>
<!--l. 130--><p class="noindent" >Specified as: a vector of integer type, see&#x00A0;<a
href="userhtmlsu7.html#x15-460003.3">3.3<!--tex4ht:ref: sec:vecttype --></a>.
</dd><dt class="description">
<span
class="cmbx-10">ovr</span><span
class="cmbx-10">_mst</span><span
class="cmbx-10">_idx</span> </dt><dd
class="description">A list to retrieve the value of each overlap element from the respective
master process.<br
class="newline" />Specified as: a vector of integer type, see&#x00A0;<a
href="userhtmlsu7.html#x15-460003.3">3.3<!--tex4ht:ref: sec:vecttype --></a>.
</dd><dt class="description">
<span
class="cmbx-10">ovrlap</span><span
class="cmbx-10">_elem</span> </dt><dd
class="description">For all overlap points belonging to th ecurrent process:
<ol class="enumerate1" >
<li
class="enumerate" id="x13-10022x1">Overlap point index;
</li>
<li
class="enumerate" id="x13-10024x2">Number of processes sharing that overlap points;
</li>
<li
class="enumerate" id="x13-10026x3">Index of a &#8220;master&#8221; process:</li></ol>
<!--l. 141--><p class="noindent" >Specified as: an allocatable integer array of rank two.
</dd><dt class="description">
<span
class="cmbx-10">bnd</span><span
class="cmbx-10">_elem</span> </dt><dd
class="description">A list of all boundary points, i.e. points that have a connection with
other processes.</dd></dl>
<!--l. 145--><p class="noindent" >The Fortran&#x00A0;2003 declaration for <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_desc_type</span></span></span> structures is as follows: <hr class="figure"><div class="figure"
><a
id="x13-100273"></a>
<div class="center"
>
<!--l. 149--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-1">
type&#x00A0;psb_desc_type
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;class(psb_indx_map),&#x00A0;allocatable&#x00A0;::&#x00A0;indxmap
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_halo_index
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_ext_index
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_ovrlap_index
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_ovr_mst_idx
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;integer,&#x00A0;allocatable&#x00A0;&#x00A0;::&#x00A0;ovrlap_elem(:,:)
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;integer,&#x00A0;allocatable&#x00A0;&#x00A0;::&#x00A0;bnd_elem(:)
&#x00A0;<br />end&#x00A0;type&#x00A0;psb_desc_type
</div>
<!--l. 161--><p class="nopar" ></div></div>
<br /> <div class="caption"
><span class="id">Figure&#x00A0;3: </span><span
class="content">The PSBLAS defined data type that contains the communication
descriptor.</span></div><!--tex4ht:label?: x13-100273 -->
<!--l. 171--><p class="indent" > </div><hr class="endfigure">
<!--l. 172--><p class="indent" > A communication descriptor associated with a sparse matrix has a state, which
can take the following values:
<dl class="description"><dt class="description">
<span
class="cmbx-10">Build:</span> </dt><dd
class="description">State entered after the first allocation, and before the first assembly; in
this state it is possible to add communication requirements among different
processes.
</dd><dt class="description">
<span
class="cmbx-10">Assembled:</span> </dt><dd
class="description">State entered after the assembly; computations using the
associated sparse matrix, such as matrix-vector products, are only possible
in this state.</dd></dl>
<!--l. 183--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.1 </span> <a
id="x13-110003.1.1"></a>Descriptor Methods</h5>
<!--l. 185--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.2 </span> <a
id="x13-120003.1.2"></a>get_local_rows &#8212; Get number of local rows</h5>
<div class="verbatim" id="verbatim-2">
nr&#x00A0;=&#x00A0;desc%get_local_rows()
</div>
<!--l. 189--><p class="nopar" >
<!--l. 191--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" /></dd></dl>
<!--l. 201--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The number of local rows, i.e. the number of rows owned by
the current process; as explained in&#x00A0;<a
href="userhtmlse1.html#x3-20001">1<!--tex4ht:ref: sec:intro --></a>, it is equal to <span
class="cmsy-10">|<img
src="cmsy10-49.png" alt="I" class="10x-x-49" /></span><sub><span
class="cmmi-7">i</span></sub><span
class="cmsy-10">|</span>+<span
class="cmsy-10">|<img
src="cmsy10-42.png" alt="B" class="10x-x-42" /></span><sub><span
class="cmmi-7">i</span></sub><span
class="cmsy-10">|</span>. The returned
value is specific to the calling process.</dd></dl>
<!--l. 210--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.3 </span> <a
id="x13-130003.1.3"></a>get_local_cols &#8212; Get number of local cols</h5>
<div class="verbatim" id="verbatim-3">
nc&#x00A0;=&#x00A0;desc%get_local_cols()
</div>
<!--l. 214--><p class="nopar" >
<!--l. 216--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" /></dd></dl>
<!--l. 226--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The number of local cols, i.e. the number of indices used by
the current process, including both local and halo indices; as explained
in&#x00A0;<a
href="userhtmlse1.html#x3-20001">1<!--tex4ht:ref: sec:intro --></a>, it is equal to <span
class="cmsy-10">|<img
src="cmsy10-49.png" alt="I" class="10x-x-49" /></span><sub><span
class="cmmi-7">i</span></sub><span
class="cmsy-10">| </span>+ <span
class="cmsy-10">|<img
src="cmsy10-42.png" alt="B" class="10x-x-42" /></span><sub><span
class="cmmi-7">i</span></sub><span
class="cmsy-10">| </span>+ <span
class="cmsy-10">|<img
src="cmsy10-48.png" alt="H" class="10x-x-48" /></span><sub><span
class="cmmi-7">i</span></sub><span
class="cmsy-10">|</span>. The returned value is specific to the
calling process.</dd></dl>
<!--l. 236--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.4 </span> <a
id="x13-140003.1.4"></a>get_global_rows &#8212; Get number of global rows</h5>
<div class="verbatim" id="verbatim-4">
nr&#x00A0;=&#x00A0;desc%get_global_rows()
</div>
<!--l. 240--><p class="nopar" >
<!--l. 242--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" /></dd></dl>
<!--l. 252--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The number of global rows, i.e. the size of the global index
space.</dd></dl>
<!--l. 258--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.5 </span> <a
id="x13-150003.1.5"></a>get_global_cols &#8212; Get number of global cols</h5>
<div class="verbatim" id="verbatim-5">
nr&#x00A0;=&#x00A0;desc%get_global_cols()
</div>
<!--l. 262--><p class="nopar" >
<!--l. 264--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" /></dd></dl>
<!--l. 274--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The number of global cols; usually this is equal to the number
of global rows.</dd></dl>
<!--l. 281--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.6 </span> <a
id="x13-160003.1.6"></a>get_global_indices &#8212; Get vector of global indices</h5>
<div class="verbatim" id="verbatim-6">
myidx&#x00A0;=&#x00A0;desc%get_global_indices([owned])
</div>
<!--l. 285--><p class="nopar" >
<!--l. 287--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />Type: <span
class="cmbx-10">required</span>.<br
class="newline" />
</dd><dt class="description">
<span
class="cmbx-10">owned</span> </dt><dd
class="description">Choose if you only want owned indices (<span class="obeylines-h"><span class="verb"><span
class="cmtt-10">owned=.true.</span></span></span>) or also halo
indices (<span class="obeylines-h"><span class="verb"><span
class="cmtt-10">owned=.false.</span></span></span>). Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />Type: <span
class="cmbx-10">optional</span>; default: <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">.true.</span></span></span>.<br
class="newline" /></dd></dl>
<!--l. 301--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The global indices, returned as an allocatable integer array of
kind <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_lpk_</span></span></span> and rank 1.</dd></dl>
<!--l. 309--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.7 </span> <a
id="x13-170003.1.7"></a>get_context &#8212; Get communication context</h5>
<div class="verbatim" id="verbatim-7">
ictxt&#x00A0;=&#x00A0;desc%get_context()
</div>
<!--l. 313--><p class="nopar" >
<!--l. 315--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" /></dd></dl>
<!--l. 325--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The communication context.</dd></dl>
<!--l. 330--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.8 </span> <a
id="x13-180003.1.8"></a>Clone &#8212; clone current object</h5>
<div class="verbatim" id="verbatim-8">
call&#x00A0;&#x00A0;desc%clone(descout,info)
</div>
<!--l. 334--><p class="nopar" >
<!--l. 336--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" /></dd></dl>
<!--l. 346--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">descout</span> </dt><dd
class="description">A copy of the input object.
</dd><dt class="description">
<span
class="cmbx-10">info</span> </dt><dd
class="description">Return code.</dd></dl>
<!--l. 353--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.9 </span> <a
id="x13-190003.1.9"></a>CNV &#8212; convert internal storage format</h5>
<div class="verbatim" id="verbatim-9">
call&#x00A0;&#x00A0;desc%cnv(mold)
</div>
<!--l. 357--><p class="nopar" >
<!--l. 359--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">desc</span> </dt><dd
class="description">the communication descriptor.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />
</dd><dt class="description">
<span
class="cmbx-10">mold</span> </dt><dd
class="description">the desired integer storage format.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />Specified as: a object of type derived from (integer)
<a
id="vbasedata"><span
class="cmtt-10">psb</span><span
class="cmtt-10">_T</span><span
class="cmtt-10">_base</span><span
class="cmtt-10">_vect</span><span
class="cmtt-10">_type</span></a>.</dd></dl>
<!--l. 370--><p class="noindent" >The <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">mold</span></span></span> arguments may be employed to interface with special devices, such as GPUs
and other accelerators.
<!--l. 377--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.10 </span> <a
id="x13-200003.1.10"></a>psb_cd_get_large_threshold &#8212; Get threshold for index mapping
switch</h5>
<div class="verbatim" id="verbatim-10">
ith&#x00A0;=&#x00A0;psb_cd_get_large_threshold()
</div>
<!--l. 381--><p class="nopar" >
<!--l. 383--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The current value for the size threshold.
</dd></dl>
<!--l. 393--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.11 </span> <a
id="x13-210003.1.11"></a>psb_cd_set_large_threshold &#8212; Set threshold for index mapping
switch</h5>
<div class="verbatim" id="verbatim-11">
call&#x00A0;psb_cd_set_large_threshold(ith)
</div>
<!--l. 398--><p class="nopar" >
<!--l. 400--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Synchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">ith</span> </dt><dd
class="description">the new threshold for communication descriptors.<br
class="newline" />Scope: <span
class="cmbx-10">global</span>.<br
class="newline" />Type: <span
class="cmbx-10">required</span>.<br
class="newline" />Intent: <span
class="cmbx-10">in</span>.<br
class="newline" />Specified as: an integer value greater than zero.</dd></dl>
<!--l. 409--><p class="noindent" >Note: the threshold value is only queried by the library at the time a call to <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_cdall</span></span></span>
is executed, therefore changing the threshold has no effect on communication
descriptors that have already been initialized. Moreover the threshold must have the
same value on all processes.
<!--l. 416--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.12 </span> <a
id="x13-220003.1.12"></a>get_p_adjcncy &#8212; Get process adjacency list</h5>
<div class="verbatim" id="verbatim-12">
list&#x00A0;=&#x00A0;&#x00A0;desc%get_p_adjcncy()
</div>
<!--l. 421--><p class="nopar" >
<!--l. 423--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">Function value</span> </dt><dd
class="description">The current list of adjacent processes, i.e. processes with
which the current one has to exchange halo data.
</dd></dl>
<!--l. 432--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.13 </span> <a
id="x13-230003.1.13"></a>set_p_adjcncy &#8212; Set process adjacency list</h5>
<div class="verbatim" id="verbatim-13">
call&#x00A0;desc%set_p_adjcncy(list)
</div>
<!--l. 437--><p class="nopar" >
<!--l. 439--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Asynchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">list</span> </dt><dd
class="description">the list of adjacent processes.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />Type: <span
class="cmbx-10">required</span>.<br
class="newline" />Intent: <span
class="cmbx-10">in</span>.<br
class="newline" />Specified as: a one-dimensional array of integers of kind <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_ipk_</span></span></span>.</dd></dl>
<!--l. 448--><p class="noindent" >Note: this method can be called after a call to <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_cdall</span></span></span> and before a call to
<span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_cdasb</span></span></span>. The user is specifying here some knowledge about which processes are
topological neighbours of the current process. The availability of this information
may speed up the execution of the assembly call <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_cdasb</span></span></span>.
<!--l. 455--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.14 </span> <a
id="x13-240003.1.14"></a>fnd_owner &#8212; Find the owner process of a set of indices</h5>
<div class="verbatim" id="verbatim-14">
call&#x00A0;desc%fnd_owner(idx,iprc,info)
</div>
<!--l. 460--><p class="nopar" >
<!--l. 462--><p class="indent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">Type:</span> </dt><dd
class="description">Synchronous.
</dd><dt class="description">
<span
class="cmbx-10">On Entry</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">idx</span> </dt><dd
class="description">the list of global indices for which we need the owning processes.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />Type: <span
class="cmbx-10">required</span>.<br
class="newline" />Intent: <span
class="cmbx-10">in</span>.<br
class="newline" />Specified as: a one-dimensional array of integers of kind <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_lpk_</span></span></span>.
</dd><dt class="description">
<span
class="cmbx-10">On Return</span> </dt><dd
class="description">
</dd><dt class="description">
<span
class="cmbx-10">iprc</span> </dt><dd
class="description">the list of processes owning the indices in <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">idx</span></span></span>.<br
class="newline" />Scope: <span
class="cmbx-10">local</span>.<br
class="newline" />Type: <span
class="cmbx-10">required</span>.<br
class="newline" />Intent: <span
class="cmbx-10">in</span>.<br
class="newline" />Specified as: an allocatable one-dimensional array of integers of kind
<span class="obeylines-h"><span class="verb"><span
class="cmtt-10">psb_ipk_</span></span></span>.</dd></dl>
<!--l. 477--><p class="noindent" >Note: this method may or may not actually require communications, depending on the
exact internal data storage; given that the choice of storage may be altered by
runtime parameters, it is necessary for safety that this method is called by all
processes.
<!--l. 485--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">3.1.15 </span> <a
id="x13-250003.1.15"></a>Named Constants</h5>
<!--l. 487--><p class="noindent" >
<dl class="description"><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_none</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Generic no-op;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_root</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Default root process for broadcast and scatter operations;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_nohalo</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Do not fetch halo elements;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_halo</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Fetch halo elements from neighbouring processes;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_sum</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Sum overlapped elements
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_avg</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Average overlapped elements
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_comm</span><span
class="cmbx-10">_halo</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Exchange data based on the <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">halo_index</span></span></span> list;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_comm</span><span
class="cmbx-10">_ext</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Exchange data based on the <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">ext_index</span></span></span> list;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_comm</span><span
class="cmbx-10">_ovr</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Exchange data based on the <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">ovrlap_index</span></span></span> list;
</dd><dt class="description">
<span
class="cmbx-10">psb</span><span
class="cmbx-10">_comm</span><span
class="cmbx-10">_mov</span><span
class="cmbx-10">_</span> </dt><dd
class="description">Exchange data based on the <span class="obeylines-h"><span class="verb"><span
class="cmtt-10">ovr_mst_idx</span></span></span> list;
</dd></dl>
<!--l. 520--><div class="crosslinks"><p class="noindent">[<a
href="userhtmlsu9.html" >next</a>] [<a
href="userhtmlsu5.html" >front</a>] [<a
href="userhtmlsu7.html#userhtmlsu8.html" >up</a>] </p></div>
<!--l. 520--><p class="indent" > <a
id="tailuserhtmlsu5.html"></a>
</body></html>