<!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 (https://tug.org/tex4ht/)"> 
<meta name="originator" content="TeX4ht (https://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"></a><span 
class="cmtt-10">psb</span><span 
class="cmtt-10">_desc</span><span 
class="cmtt-10">_type</span>. 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="lstinline"></span><span 
class="cmtt-10">psb_desc_type</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="lstinline"></span><span 
class="cmtt-10">psb_indx_map</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 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="lstinline"></span><span 
class="cmtt-10">psb_desc_type</span> structures is as follows:
<!--l. 147--><p class="indent" >   <a 
 id="x13-10027r1"></a><hr class="float"><div class="float" 
>
                                                                  

                                                                  
<div class="center" 
>
<!--l. 162--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-1">
type&#x00A0;psb_desc_type
&#x00A0;&#x00A0;&#x00A0;&#x00A0;class(psb_indx_map),&#x00A0;allocatable&#x00A0;::&#x00A0;indxmap
&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_halo_index
&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_ext_index
&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_ovrlap_index
&#x00A0;&#x00A0;&#x00A0;&#x00A0;type(psb_i_vect_type)&#x00A0;::&#x00A0;v_ovr_mst_idx
&#x00A0;&#x00A0;&#x00A0;&#x00A0;integer,&#x00A0;allocatable&#x00A0;&#x00A0;::&#x00A0;ovrlap_elem(:,:)
&#x00A0;&#x00A0;&#x00A0;&#x00A0;integer,&#x00A0;allocatable&#x00A0;&#x00A0;::&#x00A0;bnd_elem(:)
end&#x00A0;type&#x00A0;psb_desc_type
</pre>
<!--l. 174--><p class="nopar" ></div></div>
<br /> <div class="caption" 
><span class="id">Listing 1: </span><span  
class="content">The PSBLAS defined data type that contains the communication
descriptor.</span></div><!--tex4ht:label?: x13-10027r1 -->
                                                                  

                                                                  
   </div><hr class="endfloat" />
<!--l. 186--><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>
   <h5 class="subsubsectionHead"><span class="titlemark">3.1.1   </span> <a 
 id="x13-110003.1.1"></a>Descriptor Methods</h5>
<!--l. 199--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-2">
nr&#x00A0;=&#x00A0;desc%get_local_rows()
</pre>
<!--l. 203--><p class="nopar" >
<!--l. 205--><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. 215--><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. 224--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-3">
nc&#x00A0;=&#x00A0;desc%get_local_cols()
</pre>
<!--l. 228--><p class="nopar" >
<!--l. 230--><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. 240--><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. 250--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-4">
nr&#x00A0;=&#x00A0;desc%get_global_rows()
</pre>
<!--l. 254--><p class="nopar" >
<!--l. 256--><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. 266--><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. 272--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-5">
nr&#x00A0;=&#x00A0;desc%get_global_cols()
</pre>
<!--l. 276--><p class="nopar" >
<!--l. 278--><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. 288--><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. 295--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-6">
myidx&#x00A0;=&#x00A0;desc%get_global_indices([owned])
</pre>
<!--l. 299--><p class="nopar" >
<!--l. 301--><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="lstinline"></span><span 
class="cmtt-10">owned</span><span 
class="cmtt-10">=.</span><span 
class="cmtt-10">true</span><span 
class="cmtt-10">.</span>) or also halo
     indices (<span class="lstinline"></span><span 
class="cmtt-10">owned</span><span 
class="cmtt-10">=.</span><span 
class="cmtt-10">false</span><span 
class="cmtt-10">.</span>). Scope: <span 
class="cmbx-10">local</span>.<br 
class="newline" />Type: <span 
class="cmbx-10">optional</span>; default: <span class="lstinline"></span><span 
class="cmtt-10">.</span><span 
class="cmtt-10">true</span><span 
class="cmtt-10">.</span>.<br 
class="newline" /></dd></dl>
<!--l. 315--><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="lstinline"></span><span 
class="cmtt-10">psb_lpk_</span> and rank 1.</dd></dl>
<!--l. 323--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-7">
ctxt&#x00A0;=&#x00A0;desc%get_context()
</pre>
<!--l. 327--><p class="nopar" >
<!--l. 329--><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. 339--><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. 344--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-8">
call&#x00A0;&#x00A0;desc%clone(descout,info)
</pre>
<!--l. 348--><p class="nopar" >
<!--l. 350--><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. 360--><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. 367--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-9">
call&#x00A0;&#x00A0;desc%cnv(mold)
</pre>
<!--l. 371--><p class="nopar" >
<!--l. 373--><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"></a><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>.</dd></dl>
<!--l. 384--><p class="noindent" >The <span class="lstinline"></span><span 
class="cmtt-10">mold</span> arguments may be employed to interface with special devices, such as GPUs
and other accelerators.
<!--l. 391--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-10">
ith&#x00A0;=&#x00A0;psb_cd_get_large_threshold()
</pre>
<!--l. 395--><p class="nopar" >
<!--l. 397--><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. 407--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-11">
call&#x00A0;psb_cd_set_large_threshold(ith)
</pre>
<!--l. 412--><p class="nopar" >
<!--l. 414--><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. 423--><p class="noindent" >Note: the threshold value is only queried by the library at the time a call to <span class="lstinline"></span><span 
class="cmtt-10">psb_cdall</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. 430--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-12">
list&#x00A0;=&#x00A0;&#x00A0;desc%get_p_adjcncy()
</pre>
<!--l. 435--><p class="nopar" >
<!--l. 437--><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. 446--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-13">
call&#x00A0;desc%set_p_adjcncy(list)
</pre>
<!--l. 451--><p class="nopar" >
<!--l. 453--><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="lstinline"></span><span 
class="cmtt-10">psb_ipk_</span>.</dd></dl>
<!--l. 462--><p class="noindent" >Note: this method can be called after a call to <span class="lstinline"></span><span 
class="cmtt-10">psb_cdall</span> and before a call to
<span class="lstinline"></span><span 
class="cmtt-10">psb_cdasb</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="lstinline"></span><span 
class="cmtt-10">psb_cdasb</span>.
<!--l. 469--><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>
                                                                  

                                                                  
   <pre class="verbatim" id="verbatim-14">
call&#x00A0;desc%fnd_owner(idx,iprc,info)
</pre>
<!--l. 474--><p class="nopar" >
<!--l. 476--><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="lstinline"></span><span 
class="cmtt-10">psb_lpk_</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="lstinline"></span><span 
class="cmtt-10">idx</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="lstinline"></span><span 
class="cmtt-10">psb_ipk_</span>.</dd></dl>
<!--l. 491--><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. 499--><p class="noindent" >
   <h5 class="subsubsectionHead"><span class="titlemark">3.1.15   </span> <a 
 id="x13-250003.1.15"></a>Named Constants</h5>
<!--l. 501--><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="lstinline"></span><span 
class="cmtt-10">halo_index</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="lstinline"></span><span 
class="cmtt-10">ext_index</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="lstinline"></span><span 
class="cmtt-10">ovrlap_index</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="lstinline"></span><span 
class="cmtt-10">ovr_mst_idx</span> list;
     </dd></dl>
                                                                  

                                                                  
   <!--l. 534--><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. 534--><p class="indent" >   <a 
 id="tailuserhtmlsu5.html"></a>   
</body></html>