<!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. <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 <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="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 psb_desc_type     class(psb_indx_map), allocatable :: indxmap     type(psb_i_vect_type) :: v_halo_index     type(psb_i_vect_type) :: v_ext_index     type(psb_i_vect_type) :: v_ovrlap_index     type(psb_i_vect_type) :: v_ovr_mst_idx     integer, allocatable  :: ovrlap_elem(:,:)     integer, allocatable  :: bnd_elem(:) end type 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 — Get number of local rows</h5> <pre class="verbatim" id="verbatim-2"> nr = 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 <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 — Get number of local cols</h5> <pre class="verbatim" id="verbatim-3"> nc = 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 <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 — Get number of global rows</h5> <pre class="verbatim" id="verbatim-4"> nr = 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 — Get number of global cols</h5> <pre class="verbatim" id="verbatim-5"> nr = 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 — Get vector of global indices</h5> <pre class="verbatim" id="verbatim-6"> myidx = 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 — Get communication context</h5> <pre class="verbatim" id="verbatim-7"> ctxt = 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 — clone current object</h5> <pre class="verbatim" id="verbatim-8"> call  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 — convert internal storage format</h5> <pre class="verbatim" id="verbatim-9"> call  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 — Get threshold for index mapping switch</h5> <pre class="verbatim" id="verbatim-10"> ith = 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 — Set threshold for index mapping switch</h5> <pre class="verbatim" id="verbatim-11"> call 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 — Get process adjacency list</h5> <pre class="verbatim" id="verbatim-12"> list =  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 — Set process adjacency list</h5> <pre class="verbatim" id="verbatim-13"> call 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 — Find the owner process of a set of indices</h5> <pre class="verbatim" id="verbatim-14"> call 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>