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.
815 lines
34 KiB
HTML
815 lines
34 KiB
HTML
5 years ago
|
<!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. <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 <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 <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 <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 <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 <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 “master” 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 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 psb_desc_type
|
||
|
 <br />    class(psb_indx_map), allocatable :: indxmap
|
||
|
 <br />    type(psb_i_vect_type) :: v_halo_index
|
||
|
 <br />    type(psb_i_vect_type) :: v_ext_index
|
||
|
 <br />    type(psb_i_vect_type) :: v_ovrlap_index
|
||
|
 <br />    type(psb_i_vect_type) :: v_ovr_mst_idx
|
||
|
 <br />    integer, allocatable  :: ovrlap_elem(:,:)
|
||
|
 <br />    integer, allocatable  :: bnd_elem(:)
|
||
|
 <br />end type psb_desc_type
|
||
|
</div>
|
||
|
<!--l. 161--><p class="nopar" ></div></div>
|
||
|
<br /> <div class="caption"
|
||
|
><span class="id">Figure 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 — Get number of local rows</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-2">
|
||
|
nr = 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 <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 — Get number of local cols</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-3">
|
||
|
nc = 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 <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 — Get number of global rows</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-4">
|
||
|
nr = 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 — Get number of global cols</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-5">
|
||
|
nr = 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 — Get vector of global indices</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-6">
|
||
|
myidx = 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 — Get communication context</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-7">
|
||
|
ictxt = 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 — clone current object</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-8">
|
||
|
call  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 — convert internal storage format</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-9">
|
||
|
call  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 — Get threshold for index mapping
|
||
|
switch</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-10">
|
||
|
ith = 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 — Set threshold for index mapping
|
||
|
switch</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-11">
|
||
|
call 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 — Get process adjacency list</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-12">
|
||
|
list =  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 — Set process adjacency list</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-13">
|
||
|
call 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 — Find the owner process of a set of indices</h5>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="verbatim" id="verbatim-14">
|
||
|
call 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>
|