You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							3729 lines
						
					
					
						
							118 KiB
						
					
					
				
			
		
		
	
	
							3729 lines
						
					
					
						
							118 KiB
						
					
					
				| <!-------- @HEADER
 | |
|  !
 | |
|  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | |
|  !
 | |
|  !  Zoltan Toolkit for Load-balancing, Partitioning, Ordering and Coloring
 | |
|  !                  Copyright 2012 Sandia Corporation
 | |
|  !
 | |
|  ! Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
 | |
|  ! the U.S. Government retains certain rights in this software.
 | |
|  !
 | |
|  ! Redistribution and use in source and binary forms, with or without
 | |
|  ! modification, are permitted provided that the following conditions are
 | |
|  ! met:
 | |
|  !
 | |
|  ! 1. Redistributions of source code must retain the above copyright
 | |
|  ! notice, this list of conditions and the following disclaimer.
 | |
|  !
 | |
|  ! 2. Redistributions in binary form must reproduce the above copyright
 | |
|  ! notice, this list of conditions and the following disclaimer in the
 | |
|  ! documentation and/or other materials provided with the distribution.
 | |
|  !
 | |
|  ! 3. Neither the name of the Corporation nor the names of the
 | |
|  ! contributors may be used to endorse or promote products derived from
 | |
|  ! this software without specific prior written permission.
 | |
|  !
 | |
|  ! THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
 | |
|  ! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
|  ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | |
|  ! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
 | |
|  ! CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | |
|  ! EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | |
|  ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | |
|  ! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | |
|  ! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | |
|  ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | |
|  ! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  !
 | |
|  ! Questions? Contact Karen Devine	kddevin@sandia.gov
 | |
|  !                    Erik Boman	egboman@sandia.gov
 | |
|  !
 | |
|  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | |
|  !
 | |
|  ! @HEADER
 | |
| -------> 
 | |
| <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
 | |
| <html>
 | |
| <head>
 | |
|    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | |
|    <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; U; SunOS 5.6 sun4m) [Netscape]">
 | |
|   <meta name="sandia.approval_type" content="formal">
 | |
|   <meta name="sandia.approved" content="SAND2007-4748W">
 | |
|   <meta name="author" content="Zoltan PI">
 | |
| 
 | |
|    <title>Zoltan User's Guide:  General Zoltan Query Functions</title>
 | |
| 
 | |
| </head>
 | |
| <body bgcolor="#FFFFFF">
 | |
| 
 | |
| <div align=right><b><i><a href="ug.html">Zoltan User's Guide</a> 
 | |
| |  <a href="ug_query_mig.html">Next</a>  |  <a href="ug_query.html">Previous</a></i></b></div>
 | |
| 
 | |
| <h2>
 | |
| <a NAME="Load-Balancing Query Functions"></a>General Zoltan Query Functions</h2>
 | |
| The following registered functions are used by various Zoltan algorithms
 | |
| in the Zoltan library. No single algorithm uses all the query functions;
 | |
| the <a href="ug_alg.html">algorithm descriptions</a> indicate which query
 | |
| functions are required by individual algorithms.  These query functions should
 | |
| NOT contain interprocessor communication.
 | |
| <blockquote><a href="#General Functions">Object ID Functions</a>
 | |
| <blockquote><b><a href="#ZOLTAN_NUM_OBJ_FN">ZOLTAN_NUM_OBJ_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_OBJ_LIST_FN">ZOLTAN_OBJ_LIST_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_FIRST_OBJ_FN">ZOLTAN_FIRST_OBJ_FN</a></b> (deprecated)
 | |
| <br><b><a href="#ZOLTAN_NEXT_OBJ_FN">ZOLTAN_NEXT_OBJ_FN</a></b> (deprecated)
 | |
| <br><b><a href="#ZOLTAN_PART_MULTI_FN">ZOLTAN_PART_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_PART_FN">ZOLTAN_PART_FN</a></b>
 | |
| </blockquote>
 | |
| <a href="#Geometry-based Functions">Geometry-Based Functions</a>
 | |
| <blockquote><b><a href="#ZOLTAN_NUM_GEOM_FN">ZOLTAN_NUM_GEOM_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_GEOM_MULTI_FN">ZOLTAN_GEOM_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_GEOM_FN">ZOLTAN_GEOM_FN</a></b> 
 | |
| </blockquote>
 | |
| <a href="#Graph-based Functions">Graph-Based Functions</a>
 | |
| <blockquote>
 | |
| <b><a href="#ZOLTAN_NUM_EDGES_MULTI_FN">ZOLTAN_NUM_EDGES_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_NUM_EDGES_FN">ZOLTAN_NUM_EDGES_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_EDGE_LIST_MULTI_FN">ZOLTAN_EDGE_LIST_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_EDGE_LIST_FN">ZOLTAN_EDGE_LIST_FN</a></b>
 | |
| </blockquote>
 | |
| <a href="#Hypergraph-based Functions">Hypergraph-Based Functions</a>
 | |
| <blockquote>
 | |
| <b><a href="#ZOLTAN_HG_SIZE_CS_FN">ZOLTAN_HG_SIZE_CS_FN</a></b>
 | |
| <b><br><a href="#ZOLTAN_HG_CS_FN">ZOLTAN_HG_CS_FN</a></b>
 | |
| <b><br><a href="#ZOLTAN_HG_SIZE_EDGE_WTS_FN">ZOLTAN_HG_SIZE_EDGE_WTS_FN</a></b>
 | |
| <b><br><a href="#ZOLTAN_HG_EDGE_WTS_FN">ZOLTAN_HG_EDGE_WTS_FN</a></b>
 | |
| <b><br><a href="#ZOLTAN_NUM_FIXED_OBJ_FN">ZOLTAN_NUM_FIXED_OBJ_FN</a></b>
 | |
| <b><br><a href="#ZOLTAN_FIXED_OBJ_LIST_FN">ZOLTAN_FIXED_OBJ_LIST_FN</a></b>
 | |
| </blockquote>
 | |
| <a href="#Tree-based Functions">Tree-Based Functions</a>
 | |
| <blockquote><b><a href="#ZOLTAN_NUM_COARSE_OBJ_FN">ZOLTAN_NUM_COARSE_OBJ_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_COARSE_OBJ_LIST_FN">ZOLTAN_COARSE_OBJ_LIST_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_FIRST_COARSE_OBJ_FN">ZOLTAN_FIRST_COARSE_OBJ_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_NEXT_COARSE_OBJ_FN">ZOLTAN_NEXT_COARSE_OBJ_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_NUM_CHILD_FN">ZOLTAN_NUM_CHILD_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_CHILD_LIST_FN">ZOLTAN_CHILD_LIST_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_CHILD_WEIGHT_FN">ZOLTAN_CHILD_WEIGHT_FN</a></b>
 | |
| </blockquote>
 | |
| <a href="#Hierarchical Partitioning Functions">Hierarchical Partitioning Functions</a>
 | |
| <blockquote><b><a href="#ZOLTAN_HIER_NUM_LEVELS_FN">ZOLTAN_HIER_NUM_LEVELS_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_HIER_PART_FN">ZOLTAN_HIER_PART_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_HIER_METHOD_FN">ZOLTAN_HIER_METHOD_FN</a></b>
 | |
| </blockquote>
 | |
| </blockquote>
 | |
| <hr>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <h2>
 | |
| <a NAME="General Functions"></a><hr>Object ID Functions</h2>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NUM_OBJ_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NUM_OBJ_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>ierr</i>);</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Num_Obj</i></b>(<i>data, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NUM_OBJ_FN</b> query function returns the number
 | |
| of objects that are currently assigned to the processor.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The number of objects that are assigned to the processor.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_OBJ_LIST_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void<b> ZOLTAN_OBJ_LIST_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_ids</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_ids</i>,
 | |
| int <i>wgt_dim</i>,
 | |
| float *<i>obj_wgts</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Obj_List</i></b>(<i>data, num_gid_entries, num_lid_entries, global_ids, local_ids,
 | |
| wgt_dim, obj_wgts, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: wgt_dim 
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: obj_wgts 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_OBJ_LIST_FN</b> query function fills two (three
 | |
| if weights are used) arrays with information about the objects currently
 | |
| assigned to the processor. Both arrays are allocated (and subsequently
 | |
| freed) by Zoltan; their size is determined by a call to a <b><a href="#ZOLTAN_NUM_OBJ_FN">ZOLTAN_NUM_OBJ_FN</a></b>
 | |
| query function to get the array size. For many algorithms, either a <b>ZOLTAN_OBJ_LIST_FN</b>
 | |
| query function or a <b><a href="#ZOLTAN_FIRST_OBJ_FN">ZOLTAN_FIRST_OBJ_FN</a></b>/<b><a href="#ZOLTAN_NEXT_OBJ_FN">ZOLTAN_NEXT_OBJ_FN</a></b>
 | |
| query-function pair must be registered;
 | |
| however, both query options need not
 | |
| be provided.  The <b>ZOLTAN_OBJ_LIST_FN</b> is preferred for efficiency.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_OBJ_LIST_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_ids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of unique global IDs for all objects assigned to the processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_ids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of local IDs, the meaning of which can be determined by the
 | |
| application, for all objects assigned to the processor. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>wgt_dim</i></td>
 | |
| 
 | |
| <td>The number of weights associated with an object (typically 1), or 0
 | |
| if weights are not requested.  This value is set through the parameter
 | |
| <a href="ug_param.html#OBJ_WEIGHT_DIM">OBJ_WEIGHT_DIM</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>obj_wgts</i></td>
 | |
| 
 | |
| <td>Upon return, an array of object weights. Weights for object <i>i</i> are stored in <i>obj_wgts[(i-1)*wgt_dim:i*wgt_dim-1]</i>. 
 | |
| If <i>wgt_dim</i>=0, the return value of <i>obj_wgts</i> is undefined and
 | |
| may be NULL.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_FIRST_OBJ_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_FIRST_OBJ_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>first_global_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>first_local_id</i>,
 | |
| int <i>wgt_dim</i>,
 | |
| float *<i>first_obj_wgt</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_First_Obj</i></b>(<i>data, num_gid_entries, num_lid_entries, first_global_id, first_local_id,
 | |
| wgt_dim, first_obj_wgt, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_First_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: first_global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: first_local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: wgt_dim 
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: first_obj_wgt 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">
 | |
| (Deprecated) A <b>ZOLTAN_FIRST_OBJ_FN</b> query function initializes an
 | |
| iteration over objects assigned to the processor. It returns the global
 | |
| and local IDs of the first object on the processor. Subsequent calls to
 | |
| a <b><a href="#ZOLTAN_NEXT_OBJ_FN">ZOLTAN_NEXT_OBJ_FN</a></b> query function iterate
 | |
| over and return other objects assigned to the processor. 
 | |
| For many algorithms, either a <b><a href="#ZOLTAN_OBJ_LIST_FN">ZOLTAN_OBJ_LIST_FN</a></b>
 | |
| query function or a <b>ZOLTAN_FIRST_OBJ_FN</b><i>/</i><b><a href="#ZOLTAN_NEXT_OBJ_FN">ZOLTAN_NEXT_OBJ_FN</a></b>
 | |
| query-function pair must be registered;
 | |
| however, both query options need not
 | |
| be provided.
 | |
| The <b><a href="#ZOLTAN_OBJ_LIST_FN">ZOLTAN_OBJ_LIST_FN</a></b>) is preferred 
 | |
| for efficiency.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_FIRST_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    first_global_id</i></td>
 | |
| 
 | |
| <td>The returned value of the global ID for the first object; the value
 | |
| is ignored if there are no objects.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    first_local_id</i></td>
 | |
| 
 | |
| <td>The returned value of the local ID for the first object; the value
 | |
| is ignored if there are no objects.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>wgt_dim</i></td>
 | |
| 
 | |
| <td>The number of weights associated with an object (typically 1), or 0
 | |
| if weights are not requested.  This value is set through the parameter
 | |
| <a href="ug_param.html#OBJ_WEIGHT_DIM">OBJ_WEIGHT_DIM</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>first_obj_wgt</i></td>
 | |
| 
 | |
| <td>Upon return, the first object's weights; an array of length <i>wgt_dim. </i>Undefined if <i>wgt_dim=0.</i></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    1</td>
 | |
| 
 | |
| <td>If <i>first_global_id</i> and <i>first_local_id</i> contain valid IDs
 | |
| of the first object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    0</td>
 | |
| 
 | |
| <td>If no objects are available.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NEXT_OBJ_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NEXT_OBJ_FN</b>
 | |
| (void *<i> data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>next_global_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>next_local_id</i>,
 | |
| int <i>wgt_dim,</i>
 | |
| float *<i>next_obj_wgt</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Next_Obj</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id, next_global_id,
 | |
| next_local_id, wgt_dim, next_obj_wgt, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Next_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: next_global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: next_local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: wgt_dim 
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: next_obj_wgt 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">
 | |
| (Deprecated) A <b>ZOLTAN_NEXT_OBJ_FN</b> query function is an iterator
 | |
| function which, when given an object assigned to the processor, returns
 | |
| the next object assigned to the processor. The first object of the iteration
 | |
| is provided by a <b><a href="#ZOLTAN_FIRST_OBJ_FN">ZOLTAN_FIRST_OBJ_FN</a></b>
 | |
| query function. 
 | |
| For many algorithms, either a <b><a href="#ZOLTAN_OBJ_LIST_FN">ZOLTAN_OBJ_LIST_FN</a></b>
 | |
| query function or a <b><a href="#ZOLTAN_FIRST_OBJ_FN">ZOLTAN_FIRST_OBJ_FN</a></b>/<b>ZOLTAN_NEXT_OBJ_FN</b>
 | |
| query-function pair must be registered;
 | |
| however, both query options need not
 | |
| be provided.
 | |
| The <b><a href="#ZOLTAN_OBJ_LIST_FN">ZOLTAN_OBJ_LIST_FN</a></b>) is preferred 
 | |
| for efficiency.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NEXT_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the previous object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the previous object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    next_global_id</i></td>
 | |
| 
 | |
| <td>The returned value of the global ID for the next object; the value
 | |
| is ignored if there are no more objects.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    next_local_id</i></td>
 | |
| 
 | |
| <td>The returned value of the local ID for the next object; the value is
 | |
| ignored if there are no more objects.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>wgt_dim</i></td>
 | |
| 
 | |
| <td>The number of weights associated with an object (typically 1), or 0
 | |
| if weights are not requested.  This value is set through the parameter
 | |
| <a href="ug_param.html#OBJ_WEIGHT_DIM">OBJ_WEIGHT_DIM</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>next_obj_wgt</i></td>
 | |
| 
 | |
| <td>Upon return, the next object's weights; an array of length <i>wgt_dim. </i>Undefined if <i>wgt_dim=0.</i></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    1</td>
 | |
| 
 | |
| <td>If <i>next_global_id</i> and <i>next_local_id</i> contain valid IDs
 | |
| of the next object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    0</td>
 | |
| 
 | |
| <td>If no more objects are available.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_PART_MULTI_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_PART_MULTI_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| int <i>num_obj</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_ids</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_ids</i>,
 | |
| int *<i>parts</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Part_Multi</i></b>(<i>data, num_gid_entries, num_lid_entries, num_obj, global_ids, local_ids,
 | |
| ierr</i>)
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries, num_obj
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: parts
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_PART_MULTI_FN</b> query function returns a 
 | |
| list of 
 | |
| parts to which 
 | |
| given objects are currently assigned.  
 | |
| If a <b>ZOLTAN_PART_MULTI_FN</b> 
 | |
| or <b><a href="#ZOLTAN_PART_FN">ZOLTAN_PART_FN</a></b> is not
 | |
| registered, Zoltan assumes the part numbers are the processor
 | |
| number of the owning processor.  
 | |
| Valid part numbers are non-negative
 | |
| integers.  
 | |
| This function is used when parameter <a href="ug_alg.html#REMAP">REMAP</a>=1 
 | |
| and for certain methods with parameter 
 | |
| <a href="ug_alg.html#LB_APPROACH">LB_APPROACH</a>=<i>Repartition</i>.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_PART_MULTI_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_obj</i></td>
 | |
| 
 | |
| <td>The number of object IDs in arrays <i>global_ids</i> and <i>local_ids</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>global_ids</i></td>
 | |
| 
 | |
| <td>The global IDs of the objects for which the part numbers should be
 | |
| returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>local_ids</i></td>
 | |
| 
 | |
| <td>The local IDs of the objects for which the part numbers should be
 | |
| returned. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>parts</i></td>
 | |
| 
 | |
| <td>Upon return, an array of part numbers corresponding to the global 
 | |
| and local IDs.
 | |
| </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| <hr><hr>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_PART_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_PART_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Part</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Part 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_PART_FN</b> query function returns the 
 | |
| part to which 
 | |
| a given object is currently assigned.
 | |
| If a <b>ZOLTAN_PART_FN</b> 
 | |
| or <b><a href="#ZOLTAN_PART_MULTI_FN">ZOLTAN_PART_MULTI_FN</a></b>
 | |
| is not
 | |
| registered, Zoltan assumes the part numbers are the processor
 | |
| number of the owning processor.  
 | |
| Valid part numbers are non-negative
 | |
| integers.
 | |
| This function is used when parameter <a href="ug_alg.html#REMAP">REMAP</a>=1 
 | |
| and for certain methods with parameter 
 | |
| <a href="ug_alg.html#LB_APPROACH">LB_APPROACH</a>=<i>Repartition</i>.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_PART_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object for which the part number should be
 | |
| returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object for which the part number should be
 | |
| returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The part number for the object identified by <i>global_id</i> and
 | |
| <i>local_id</i>.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| <hr>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <h2>
 | |
| <a NAME="Geometry-based Functions"></a><hr>Geometry-based Functions</h2>
 | |
| 
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NUM_GEOM_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NUM_GEOM_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Num_Geom</i></b>(<i>data, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Geom 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NUM_GEOM_FN</b> query function returns the number
 | |
| of values needed to express the geometry of an object. For example, for
 | |
| a two-dimensional mesh-based application, (<i>x</i>,<i>y</i>) coordinates
 | |
| are needed to describe an object's geometry; thus the <b>ZOLTAN_NUM_GEOM_FN</b>
 | |
| query function should return the value of two. For a similar three-dimensional
 | |
| application, the return value should be three.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_GEOM_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The number of values needed to express the geometry of an object.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_GEOM_MULTI_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_GEOM_MULTI_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| int <i>num_obj</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_ids</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_ids</i>,
 | |
| int <i>num_dim</i>,
 | |
| double *<i>geom_vec</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Geom_Multi</i></b>(<i>data, num_gid_entries, 
 | |
| num_lid_entries, num_obj, global_ids, local_ids, num_dim, geom_vec, ierr</i>)
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_obj, num_dim
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_ids
 | |
| <br>REAL(Zoltan_DOUBLE), INTENT(OUT), DIMENSION(*) :: geom_vec
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_GEOM_MULTI FN</b> query function returns a 
 | |
| vector of
 | |
| geometry values for a list of given objects. The geometry vector is allocated by
 | |
| Zoltan to be of size <i>num_obj</i> * <i>num_dim</i>; its format is described
 | |
| below.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_GEOM_MULTI_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_obj</i></td>
 | |
| 
 | |
| <td>The number of object IDs in arrays <i>global_ids</i> and <i>local_ids</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_ids</i></td>
 | |
| 
 | |
| <td>Array of global IDs of objects whose geometry values should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_ids</i></td>
 | |
| 
 | |
| <td>Array of local IDs of objects whose geometry values should be returned. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>num_dim</i></td>
 | |
| 
 | |
| <td>Number of coordinate entries per object (typically 1, 2, or 3).
 | |
| </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>geom_vec</i></td>
 | |
| 
 | |
| <td>Upon return, an array containing geometry values.
 | |
| For object <i>i</i> 
 | |
| (specified by <i>global_ids[i*num_gid_entries]</i> and
 | |
| <i>local_ids[i*num_lid_entries]</i>, <i>i=0,1,...,num_obj-1</i>), 
 | |
| coordinate values should be stored 
 | |
| in <i>geom_vec[i*num_dim:(i+1)*num_dim-1]</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <br> 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_GEOM_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_GEOM_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| double *<i>geom_vec</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Geom</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id, geom_vec,
 | |
| ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>REAL(Zoltan_DOUBLE), INTENT(OUT), DIMENSION(*) :: geom_vec 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_GEOM_FN</b> query function returns a vector of
 | |
| geometry values for a given object. The geometry vector is allocated by
 | |
| Zoltan to be of the size returned by a <b><a href="#ZOLTAN_NUM_GEOM_FN">ZOLTAN_NUM_GEOM_FN</a></b>
 | |
| query function.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_GEOM_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object whose geometry values should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object whose geometry values should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>geom_vec</i></td>
 | |
| 
 | |
| <td>Upon return, an array containing geometry values.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <br> 
 | |
| <hr>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <h2>
 | |
| <a NAME="Graph-based Functions"></a><hr>Graph-based Functions</h2>
 | |
| 
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NUM_EDGES_MULTI_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_NUM_EDGES_MULTI_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| int <i>num_obj</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_ids</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_ids</i>,
 | |
| int *<i>num_edges</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Num_Edges_Multi</i></b>(<i>data, num_gid_entries, num_lid_entries, num_obj, global_ids, local_ids, num_edges,
 | |
| ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Edges 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries, num_obj
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT),DIMENSION(*) :: num_edges
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NUM_EDGES_MULTI_FN</b> query function returns 
 | |
| the number
 | |
| of edges in the communication graph of the application for each object in a 
 | |
| list of objects.  That is, for each object in the <i>global_ids/local_ids</i> 
 | |
| arrays, the number of objects with which the given object must share 
 | |
| information is returned.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_EDGES_MULTI_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_obj</i></td>
 | |
| 
 | |
| <td>The number of object IDs in arrays <i>global_ids</i> and <i>local_ids</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>global_ids</i></td>
 | |
| 
 | |
| <td>Array of global IDs of objects whose number of edges should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>local_ids</i></td>
 | |
| 
 | |
| <td>Array of local IDs of objects whose number of edges should be returned. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td valign=top>    <i>num_edges</i></td>
 | |
| 
 | |
| <td>Upon return, an array containing numbers of edges.
 | |
| For object <i>i</i> 
 | |
| (specified by <i>global_ids[i*num_gid_entries]</i> and
 | |
| <i>local_ids[i*num_lid_entries]</i>, <i>i=0,1,...,num_obj-1</i>), 
 | |
| the number of edges should be stored 
 | |
| in <i>num_edges[i]</i>.
 | |
| </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NUM_EDGES_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NUM_EDGES_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Num_Edges</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Edges 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NUM_EDGES_FN</b> query function returns the number
 | |
| of edges for a given object in the communication graph of the application
 | |
| (i.e., the number of objects with which the given object must share information).
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_EDGES_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object for which the number of edges should be
 | |
| returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>    <i>local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object for which the number of edges should be
 | |
| returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The number of edges for the object identified by <i>global_id</i> and
 | |
| <i>local_id</i>.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_EDGE_LIST_MULTI_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_EDGE_LIST_MULTI_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| int <i>num_obj</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_ids</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_ids</i>,
 | |
| int *<i>num_edges</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>nbor_global_id</i>,
 | |
| int *<i>nbor_procs</i>,
 | |
| int <i>wgt_dim</i>,
 | |
| float *<i>ewgts</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Edge_List_Multi</i></b>(<i>data, num_gid_entries, num_lid_entries, num_obj, global_ids, local_ids, num_edges,
 | |
| nbor_global_id, nbor_procs, wgt_dim, ewgts, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries, num_obj
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: num_edges
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: nbor_global_id
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: nbor_procs
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: wgt_dim
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: ewgts
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_EDGE_LIST_MULTI_FN</b> query function returns lists
 | |
| of global IDs, processor IDs, and optionally edge weights for objects sharing
 | |
| edges with objects specified in the <i>global_ids</i> input array; objects share
 | |
| edges when they must share information
 | |
| with other objects. The arrays for the returned neighbor lists are
 | |
| allocated by Zoltan; their size is determined by a
 | |
| calls to <b><a href="#ZOLTAN_NUM_EDGES_MULTI_FN">ZOLTAN_NUM_EDGES_MULTI_FN</a></b> or <b><a href="#ZOLTAN_NUM_EDGES_FN">ZOLTAN_NUM_EDGES_FN</a></b> query functions.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_EDGE_LIST_MULTI_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_obj</i></td>
 | |
| 
 | |
| <td>The number of object IDs in arrays <i>global_ids</i> and <i>local_ids</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_ids</i></td>
 | |
| 
 | |
| <td>Array of global IDs of objects whose edge lists should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_ids</i></td>
 | |
| 
 | |
| <td>Array of local IDs of objects whose edge lists should be returned. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td valign=top>    <i>num_edges</i></td>
 | |
| 
 | |
| <td>An array containing numbers of edges for each object in <i>global_ids</i>.
 | |
| For object <i>i</i> 
 | |
| (specified by <i>global_ids[i*num_gid_entries]</i> and
 | |
| <i>local_ids[i*num_lid_entries]</i>, <i>i=0,1,...,num_obj-1</i>), 
 | |
| the number of edges is stored 
 | |
| in <i>num_edges[i]</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>nbor_global_id</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of objects sharing edges with the
 | |
| objects specified in <i>global_ids</i>.
 | |
| For object <i>i</i>
 | |
| (specified by <i>global_ids[i*num_gid_entries]</i> and
 | |
| <i>local_ids[i*num_lid_entries]</i>, <i>i=0,1,...,num_obj-1</i>), 
 | |
| edges are stored in 
 | |
| <i>nbor_global_id[sum*num_gid_entries]</i> to 
 | |
| <i>nbor_global_id[(sum+num_edges[i])*num_gid_entries-1]</i>, where
 | |
| <i>sum</i> = the sum of <i>num_edges[j]</i> for <i>j=0,1,...,i-1</i>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>nbor_procs</i></td>
 | |
| 
 | |
| <td>Upon return, an array of processor IDs that identifies where the neighboring
 | |
| objects reside. For neighboring object <i>i</i> (stored in
 | |
| <i>nbor_global_id[i*num_gid_entries]</i>), the processor owning the neighbor
 | |
| is stored in <i>nbor_procs[i]</i>.
 | |
| 
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>wgt_dim</i></td>
 | |
| 
 | |
| <td>The number of weights associated with an edge (typically 1), or 0 if
 | |
| edge weights are not requested.  This value is set through the parameter
 | |
| <a href="ug_param.html#EDGE_WEIGHT_DIM">EDGE_WEIGHT_DIM</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>ewgts</i></td>
 | |
| 
 | |
| <td>Upon return, an array of edge weights, where <i>ewgts[i*wgt_dim:(i+1)*wgt_dim-1]</i>
 | |
| <br>corresponds to the weights for the <i>i</i>th edge. If <i>wgt_dim=0</i>, the
 | |
| return value of <i>ewgts</i> is undefined and may be NULL.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <br> 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_EDGE_LIST_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_EDGE_LIST_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>nbor_global_id</i>,
 | |
| int *<i>nbor_procs</i>,
 | |
| int <i>wgt_dim</i>,
 | |
| float *<i>ewgts</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Edge_List</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| nbor_global_id, nbor_procs, wgt_dim, ewgts, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: nbor_global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: nbor_procs 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: wgt_dim 
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: ewgts 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_EDGE_LIST_FN</b> query function returns lists
 | |
| of global IDs, processor IDs, and optionally edge weights for objects sharing
 | |
| an edge with a given object (i.e., objects that must share information
 | |
| with the given object). The arrays for the returned neighbor lists are
 | |
| allocated by Zoltan; their size is determined by a
 | |
| call to <b><a href="#ZOLTAN_NUM_EDGES_MULTI_FN">ZOLTAN_NUM_EDGES_MULTI_FN</a></b> or 
 | |
| <b><a href="#ZOLTAN_NUM_EDGES_FN">ZOLTAN_NUM_EDGES_FN</a></b> query functions.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_EDGE_LIST_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object for which an edge list should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object for which an edge list should be returned.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>nbor_global_id</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of objects sharing edges with the
 | |
| given object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>nbor_procs</i></td>
 | |
| 
 | |
| <td>Upon return, an array of processor IDs that identifies where the neighboring
 | |
| objects reside.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>wgt_dim</i></td>
 | |
| 
 | |
| <td>The number of weights associated with an edge (typically 1), or 0 if
 | |
| edge weights are not requested.  This value is set through the parameter
 | |
| <a href="ug_param.html#EDGE_WEIGHT_DIM">EDGE_WEIGHT_DIM</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>ewgts</i></td>
 | |
| 
 | |
| <td>Upon return, an array of edge weights, where <i>ewgts[i*wgt_dim:(i+1)*wgt_dim-1]</i>
 | |
| <br>corresponds to the weights for the <i>i</i>th edge. If <i>wgt_dim=0</i>, the
 | |
| return value of <i>ewgts </i>is undefined and may be NULL.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <br> 
 | |
| <hr>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <h2>
 | |
| <a NAME="Hypergraph-based Functions"></a><hr>Hypergraph-based Functions</h2>
 | |
| 
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HG_SIZE_CS_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_HG_SIZE_CS_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>num_lists</i>,
 | |
| int *<i>num_pins</i>,
 | |
| int *<i>format</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_HG_Size_CS</i></b>(<i>data, num_lists, num_pins, 
 | |
| format, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: num_lists 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: num_pins 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: format 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A hypergraph 
 | |
| can be supplied to the Zoltan library in
 | |
| one of two compressed storage formats.  Although hypergraphs
 | |
| are often used to represent the structure of sparse matrices, 
 | |
| the Zoltan/PHG terminology is purely in terms of vertices and hyperedges
 | |
| (not rows or columns). The two compressed formats are analogous to CRS and CCS 
 | |
| for matrices. In compressed hyperedge format 
 | |
| (<b>ZOLTAN_COMPRESSED_EDGE</b>)
 | |
| a list of global hyperedge IDs is provided.  Then a single
 | |
| list of the hypergraph pins, is provided.  
 | |
| A pin is the connection between a vertex and a hyperedge
 | |
| (corresponds to a nonzero in a sparse matrix).
 | |
| Pins do not have separate IDs but are rather
 | |
| identified by the
 | |
| global ID of the vertex containing the pin, and implicitly also
 | |
| by the hyperedge ID.  An example is provided below.
 | |
| <p>
 | |
| The other format
 | |
| is compressed vertex (<b>ZOLTAN_COMPRESSED_VERTEX</b>).  In this
 | |
| format a list of vertex global IDs is provided.  Then a
 | |
| list of pins ordered by vertex and then by hyperedge is provided.
 | |
| The pin ID in this case is the global ID of the hyperedge in which the
 | |
| pin appears.  In both formats, an array must be provided pointing to
 | |
| the start in the list of pins where each hyperedge or vertex begins.
 | |
| <p> 
 | |
| The purpose of this query function is to tell Zoltan in which format the
 | |
| application will supply the hypergraph, how many vertices and hyperedges
 | |
| there will be, and how many pins.  The actual hypergraph is supplied
 | |
| with a query function of the type
 | |
| <b><a href="#ZOLTAN_HG_CS_FN">ZOLTAN_HG_CS_FN_TYPE</a></b>.
 | |
| <br> <br>
 | |
| This query function is required by all applications using the hypergraph methods
 | |
| of Zoltan (unless they are using the
 | |
| <a href="#Graph-based Functions">graph-based</a>
 | |
| functions with hypergraph code instead).
 | |
| 
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HG_SIZE_CS_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lists</i></td>
 | |
| <td>Upon return, the number of vertices (if using compressed vertex storage) or
 | |
| hyperedges (if using compressed hyperedge storage) that will be supplied to Zoltan by the application process.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_pins</i></td>
 | |
| <td>Upon return, the number of pins (connections between vertices and hyperedges) that will be
 | |
| supplied to Zoltan by the application process.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>format</i></td>
 | |
| <td>Upon return, the format in which the application process will provide the
 | |
| hypergraph to Zoltan.  The options are
 | |
| <b>ZOLTAN_COMPRESSED_EDGE</b> and <b>ZOLTAN_COMPRESSED_VERTEX</b>.
 | |
| </tr>
 | |
| 
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HG_CS_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_HG_CS_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_vtx_edge</i>,
 | |
| int <i>num_pins</i>,
 | |
| int <i>format</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>vtxedge_GID</i>,
 | |
| int *<i>vtxedge_ptr</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>pin_GID</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_HG_CS</i></b>(<i>data, 
 | |
|    num_gid_entries, num_vtx_edge, num_pins, format,
 | |
|    vtxedge_GID, vtxedge_ptr, pin_GID, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_vtx_edge, num_pins, format
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: vtxedge_GID
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: vtxedge_ptr
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: pin_GID
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| 
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_HG_CS_FN</b> returns 
 | |
| a hypergraph in a compressed storage (CS) format.  The size and format
 | |
| of the data to be returned must have been supplied to Zoltan using a
 | |
| <b><a href="#ZOLTAN_HG_SIZE_CS_FN">ZOLTAN_HG_SIZE_CS_FN_TYPE</a></b>
 | |
| function.
 | |
| <br> <br>
 | |
| When a hypergraph is distributed across multiple processes, Zoltan
 | |
| expects that all processes share a consistent global numbering
 | |
| scheme for hyperedges and vertices. Also, no two
 | |
| processes should return the same pin (matrix non-zero) in this
 | |
| query function. (Pin ownership is unique.)
 | |
| <br> <br>
 | |
| This query function is required by all applications using the hypergraph methods
 | |
| of Zoltan (unless they are using the
 | |
| <a href="#Graph-based Functions">graph-based</a>
 | |
| functions with hypergraph code instead).
 | |
| 
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HG_CS_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_vtx_edge</i></td>
 | |
| <td>The number of global IDs
 | |
| that is expected to appear on return in <i>vtxedge_GID</i>. This may
 | |
| correspond to either vertices or (hyper-)edges. </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_pins</i></td>
 | |
| <td>The number of pins 
 | |
| that is expected to appear on return in <i>pin_GID</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>format</i></td>
 | |
| <td>If <i>format</i> is <b>ZOLTAN_COMPRESSED_EDGE</b>, Zoltan expects
 | |
| that hyperedge global IDs will be returned in <i>vtxedge_GID</i>,
 | |
| and that vertex global IDs will be returned in
 | |
| <i>pin_GIDs</i>.  If it is <b>ZOLTAN_COMPRESSED_VERTEX</b>, then
 | |
| vertex global IDs are expected to be returned in <i>vtxedge_GID</i> and 
 | |
| hyperedge global IDs are expected to be returned in <i>pin_GIDs</i>.
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>vtxedge_GID</i></td>
 | |
| <td>Upon return, a list of <i>num_vtx_edge</i> global IDs.  
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>vtxedge_ptr</i></td>
 | |
| <td>Upon return, this array contains <i>num_vtx_edge</i> integers
 | |
| such that the number of pins specified for hyperedge <i>j</i> 
 | |
| (if format is <b>ZOLTAN_COMPRESSED_EDGE</b>) or vertex <i>j</i>
 | |
| (if format is <b>ZOLTAN_COMPRESSED_VERTEX</b>)  
 | |
| is 
 | |
| <i>vtxedge_ptr[j+1]-vtxedge_ptr[j]</i>.
 | |
| If <i>format</i> is <b>ZOLTAN_COMPRESSED_EDGE</b>, 
 | |
| <i>vtxedge_ptr[j]*num_gid_entries</i> is the index into the
 | |
| array <i>pin_GID</i> where edge <i>j</i>'s pins 
 | |
| (vertices belonging to edge <i>j</i>)
 | |
| begin;
 | |
| if <i>format</i> is <b>ZOLTAN_COMPRESSED_VERTEX</b>, 
 | |
| <i>vtxedge_ptr[j]*num_gid_entries</i> is the index into the
 | |
| array <i>pin_GID</i> where vertex <i>j</i>'s pins (edges to which 
 | |
| vertex <i>j</i> belongs)
 | |
| begin.
 | |
| Array indices begin at zero.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>pin_GID</i></td>
 | |
| <td>Upon return, a list of <i>num_pins</i> global IDs.  This is the list
 | |
| of the pins contained in the hyperedges or vertices 
 | |
| listed in <i>vtxedge_GID</i>.
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <br> <br>
 | |
| <center>
 | |
| <table border=5 cellspacing=10 cellpadding=10>
 | |
| <caption>Example</caption>
 | |
| <tr>
 | |
| <td>
 | |
|   <table border=2>
 | |
|   <tr>
 | |
|   <th colspan=1></th><th colspan=5>vertex</th>
 | |
|   </tr>
 | |
|   <tr>
 | |
|   <th>hyperedge</th> <th>10</th> <th>20</th> <th>30</th> <th>40</th> <th>50</th>
 | |
|   </tr>
 | |
|   <tr>
 | |
|   <th>1</th> <td>0</td> <td>0</td> <td>X</td> <td>X</td> <td>0</td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|   <th>2</th> <td>0</td> <td>X</td> <td>X</td> <td>0</td> <td>0</td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|   <th>3</th> <td>X</td> <td>0</td> <td>0</td> <td>0</td> <td>X</td>
 | |
|   </tr>
 | |
|   </table>
 | |
| </td>
 | |
| <td>
 | |
|   Compressed hyperedge storage:<br><br>
 | |
|   vtxedge_GID = {1, 2, 3}<br>
 | |
|   vtxedge_ptr = {0, 2, 4}<br>
 | |
|   pin_GID = {30, 40, 20, 30, 10, 50}<br><br>
 | |
|   Compressed vertex storage:<br><br>
 | |
|   vtxedge_GID = {10, 20, 30, 40, 50}<br>
 | |
|   vtxedge_ptr = {0, 1, 2, 4, 5}<br>
 | |
|   pin_GID = {3, 2, 1, 2, 1, 3}
 | |
| </td>
 | |
| </tr>
 | |
| </table>
 | |
| </center>
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HG_SIZE_EDGE_WTS_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_HG_SIZE_EDGE_WTS_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>num_edges</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_HG_Size_Edge_Wts</i></b>(<i>data, num_edges, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: num_edges
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| 
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_HG_SIZE_EDGE_WTS_FN</b> returns
 | |
| the number of hyperedges for which a process will supply edge weights.
 | |
| The number of weights per hyperedge was supplied by the application
 | |
| with the <a href="ug_param.html#EDGE_WEIGHT_DIM">EDGE_WEIGHT_DIM</a>
 | |
| parameter.  The actual edge weights will be supplied with a 
 | |
| <b><a href="#ZOLTAN_HG_EDGE_WTS_FN">ZOLTAN_HG_EDGE_WTS_FN_TYPE</a></b>
 | |
| function.
 | |
| <br> <br>
 | |
| This query function is not required.  If no hyperedge weights are
 | |
| supplied, Zoltan will assume every hyperedge has weight 1.0.
 | |
| 
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HG_SIZE_EDGE_WTS_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_edges</i></td>
 | |
| <td>Upon return, the number of hyperedges for which edge weights
 | |
| will be supplied.
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HG_EDGE_WTS_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_HG_EDGE_WTS_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| int <i>num_edges</i>,
 | |
| int <i>edge_weight_dim</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>edge_GID</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>edge_LID</i>,
 | |
| float  *<i>edge_weight</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_HG_Edge_Wts</i></b>(<i>data, num_gid_entries, num_lid_entries, num_edges, edge_weight_dim, edge_GID, edge_LID, edge_weight,
 | |
| ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries, num_edges, edge_weight_dim 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: edge_GID 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: edge_LID 
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: edge_weight 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| 
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_HG_EDGE_WTS_FN</b> returns
 | |
| edges weights for a set of hypergraph edges.  The number of weights
 | |
| supplied for each hyperedge should equal the value of the
 | |
| <a href="ug_param.html#EDGE_WEIGHT_DIM">EDGE_WEIGHT_DIM</a>
 | |
| parameter.  In the case of a hypergraph which is distributed across
 | |
| multiple processes, if more than one process supplies edge weights for the
 | |
| same hyperedge, the different edge weights will be resolved according
 | |
| to the value of the
 | |
| <a href="ug_alg_phg.html#PHG_EDGE_WEIGHT_OPERATION">PHG_EDGE_WEIGHT_OPERATION</a> 
 | |
| parameter.
 | |
| <br><br>
 | |
| This query function is not required.  If no hyperedge weights are
 | |
| supplied, Zoltan will assume every hyperedge has weight 1.0.
 | |
| 
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HG_EDGE_WTS_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_edges</i></td>
 | |
| <td>The number of hyperedges for which edge weights
 | |
| should be supplied in the <i>edge_weight</i> array.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>edge_weight_dim</i></td>
 | |
| <td>The number of weights which should be supplied for each hyperedge.  This
 | |
| is also the value of the 
 | |
| <a href="ug_param.html#EDGE_WEIGHT_DIM">EDGE_WEIGHT_DIM</a> parameter.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>edge_GID</i></td>
 | |
| <td>Upon return, this array should contain the global IDs of the
 | |
| <i>num_edges</i> hyperedges for which the application is supplying
 | |
| edge weights.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>edge_LID</i></td>
 | |
| <td>Upon return, this array can optionally contain the local IDs of the
 | |
| <i>num_edges</i> hyperedges for which the application is supplying
 | |
| edge weights.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>edge_weight</i></td>
 | |
| <td>Upon return, this array should contain the weights for each
 | |
| edge listed in the <i>edge_GID</i>.  If <i>edge_weight_dim</i> is
 | |
| greater than one, all weights for one hyperedge are listed before
 | |
| the weights for the next hyperedge are listed.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <br> 
 | |
| 
 | |
| <p>
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr>
 | |
| <a NAME="ZOLTAN_NUM_FIXED_OBJ_FN"></a>
 | |
| <hr>
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NUM_FIXED_OBJ_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Num_Fixed_Obj</i></b>(<i>data, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Fixed_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">
 | |
| A <b>ZOLTAN_NUM_FIXED_OBJ_FN </b> returns
 | |
| the number of objects on a given processor fixed to particular parts.
 | |
| These objects will not be assigned to a part other than the user specified
 | |
| part by the parallel hypergraph algorithm.
 | |
| <br><br>
 | |
| This query function is not required.  If it is not defined, all
 | |
| objects are candidates for migration to new parts.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_FIXED_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The number of objects on this processor that are to be fixed to a specific part.</td>
 | |
| </tr>
 | |
| 
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <br> 
 | |
| <hr>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <a NAME="ZOLTAN_FIXED_OBJ_LIST_FN"></a>
 | |
| <hr>
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void<b> ZOLTAN_FIXED_OBJ_LIST_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_fixed_obj</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| <b>ZOLTAN_ID_PTR</b></a> <i>fixed_gids</i>,
 | |
| int *<i>fixed_parts</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Fixed_Obj_List</i></b>(<i>data, num_fixed_obj, num_gid_entries, fixed_gids, fixed_parts, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_fixed_obj 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: fixed_gids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: fixed_parts 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_FIXED_OBJ_LIST_FN</b> query function fills two
 | |
| arrays with information about the objects that should not be moved from
 | |
| their user assigned parts.
 | |
| These arrays are allocated (and subsequently
 | |
| freed) by Zoltan; their size is determined by a call to a <b><a href="#ZOLTAN_NUM_FIXED_OBJ_FN">ZOLTAN_NUM_FIXED_OBJ_FN</a></b>
 | |
| query function to get the array size. 
 | |
| <p>
 | |
| A process should only fix the part of objects that it <i>owns</i>, that is,
 | |
| objects that it had previously supplied in a
 | |
| <a href=#ZOLTAN_OBJ_LIST_FN>ZOLTAN_OBJ_LIST_FN</a> query function.  It is
 | |
| an error to list the global ID of an object owned by another process.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_FIXED_OBJ_LIST_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_fixed_obj</i></td>
 | |
| 
 | |
| <td>The number of objects you will list in the two output arrays.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    fixed_gids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of unique global IDs for all objects assigned to the processor which are to be fixed to a part.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>fixed_parts</i></td>
 | |
| 
 | |
| <td>Upon return, an array of part numbers, one for each object listed
 | |
| in the global ID array.  These objects will not be migrated from this assigned
 | |
| part.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <hr>
 | |
| 
 | |
| <p>
 | |
| <!------------------------------------------------------------------------->
 | |
| <h2>
 | |
| <a NAME="Tree-based Functions"></a><hr>Tree-based Functions</h2>
 | |
| 
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NUM_COARSE_OBJ_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NUM_COARSE_OBJ_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Num_Coarse_Obj</i></b>(<i>data, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Coarse_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NUM_COARSE_OBJ_FN</b> query function returns
 | |
| the number of objects (elements) in the initial coarse grid.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_COARSE_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The number of objects in the coarse grid.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_COARSE_OBJ_LIST_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_COARSE_OBJ_LIST_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_ids</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_ids</i>,
 | |
| int *<i>assigned</i>,
 | |
| int *<i>num_vert</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>vertices</i>, 
 | |
| int *<i>in_order</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>in_vertex</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>out_vertex</i>, 
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Coarse_Obj_List</i></b>(<i>data, num_gid_entries, num_lid_entries, global_ids, local_ids,
 | |
| assigned, num_vert, vertices, in_order, in_vertex, out_vertex, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: assigned, num_vert, vertices,
 | |
| in_vertex, out_vertex 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: in_order, ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_COARSE_OBJ_LIST_FN</b> query function returns
 | |
| lists of global IDs, local IDs, vertices, and order information for all
 | |
| objects (elements) of the initial coarse grid. The vertices are designated
 | |
| by a global ID such that if two elements share a vertex then the same ID
 | |
| designates that vertex in both elements and on all processors.
 | |
| The user may choose to provide the order in which the elements should be
 | |
| traversed or have Zoltan determine the order. If the user provides the
 | |
| order, then entry and exit vertices for a path through the elements may
 | |
| also be provided. The arrays for the returned values are allocated by 
 | |
| Zoltan; their size is determined by a call to a <b><a href="#ZOLTAN_NUM_COARSE_OBJ_FN">ZOLTAN_NUM_COARSE_OBJ_FN</a></b>
 | |
| query function.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_COARSE_OBJ_LIST_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_ids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of all objects in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_ids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of local IDs of all objects in the coarse grid. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>assigned</i></td>
 | |
| 
 | |
| <td>Upon return, an array of integers indicating whether or not each object
 | |
| is currently assigned to this processor. A value of 1 indicates it is assigned
 | |
| to this processor; a value of 0 indicates it is assigned to some other
 | |
| processor. For elements that have been refined, it is ignored unless weights
 | |
| are assigned to interior nodes of the tree.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_vert</i></td>
 | |
| 
 | |
| <td>Upon return, an array containing the number of vertices for each object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    vertices</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertices of each object. If the
 | |
| number of vertices for objects 0 through <i>i</i>-1 is <i>N</i>, then the
 | |
| vertices for object <i>i</i> are in <i>vertices</i>[<i>N*num_gid_entries:
 | |
| (N+num_vert</i>[<i>i</i>]<i>)*num_gid_entries</i>]</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    in_order</i></td>
 | |
| 
 | |
| <td>Upon return, 1 if the user is providing the objects in the order in
 | |
| which they should be traversed, or 0 if Zoltan should determine the order.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    in_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertices through which to enter
 | |
| each element in the user provided traversal. It is required only if the
 | |
| user is providing the order for the coarse grid objects (i.e., <i>in_order</i>==1)
 | |
| and allowing Zoltan to select the order of the children in at least one
 | |
| invocation of
 | |
| <b><a href="#ZOLTAN_CHILD_LIST_FN">ZOLTAN_CHILD_LIST_FN</a></b>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    out_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertex through which to exit each
 | |
| element in the user provided traversal. The same provisions hold as for
 | |
| <i>in_vertex</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_FIRST_COARSE_OBJ_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_FIRST_COARSE_OBJ_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>, 
 | |
| int *<i>assigned</i>,
 | |
| int *<i>num_vert</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>vertices</i>, 
 | |
| int *<i>in_order</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>in_vertex</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>out_vertex</i>, 
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_First_Coarse_Obj</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| assigned, num_vert, vertices, in_order, in_vertex, out_vertex, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_First_Coarse_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: assigned, num_vert, in_order, ierr 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: vertices, in_vertex, out_vertex 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_FIRST_COARSE_OBJ_FN</b> query function initializes
 | |
| an iteration over the objects of the initial coarse grid. It returns the
 | |
| global ID, local ID, vertices, and order information for the first object
 | |
| (element) of the initial coarse grid. Subsequent calls to a <b><a href="#ZOLTAN_NEXT_COARSE_OBJ_FN">ZOLTAN_NEXT_COARSE_OBJ_FN</a></b>
 | |
| iterate over and return other objects from the coarse grid. The vertices
 | |
| are designated by a global ID such that if two elements share a vertex then
 | |
| the same ID designates that vertex in both elements and on all processors.
 | |
| The user may choose to provide the order in which the elements
 | |
| should be traversed, or have Zoltan determine the order. If the user provides
 | |
| the order, then entry and exit vertices for a path through the elements
 | |
| may also be provided.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_FIRST_COARSE_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_ids</i></td>
 | |
| 
 | |
| <td>Upon return, the global ID of the first object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_ids</i></td>
 | |
| 
 | |
| <td>Upon return, the local ID of the first object in the coarse grid. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>assigned</i></td>
 | |
| 
 | |
| <td>Upon return, an integer indicating whether or not this object is currently
 | |
| assigned to this processor. A value of 1 indicates it is assigned to this
 | |
| processor; a value of 0 indicates it is assigned to some other processor.
 | |
| For elements that have been refined, it is ignored unless weights are assigned
 | |
| to interior nodes of the tree.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_vert</i></td>
 | |
| 
 | |
| <td>Upon return, the number of vertices for this object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    vertices</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertices of this object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    in_order</i></td>
 | |
| 
 | |
| <td>Upon return, 1 if the user is providing the objects in the order in
 | |
| which they should be traversed, or 0 if Zoltan should determine the order.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    in_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, the vertex through which to enter this element in the
 | |
| user provided traversal. It is required only if the user is providing the
 | |
| order for the coarse grid objects (i.e., <i>in_order</i>==1) and allowing
 | |
| Zoltan to select the order of the children in at least one invocation of
 | |
| <b><a href="#ZOLTAN_CHILD_LIST_FN">ZOLTAN_CHILD_LIST_FN</a></b>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    out_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, the vertex through which to exit this element in the user
 | |
| provided traversal. The same provisions hold as for
 | |
| <i>in_vertex</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    1</td>
 | |
| 
 | |
| <td>If <i>global_id</i> and <i>local_id</i> contain valid IDs of the first
 | |
| object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    0</td>
 | |
| 
 | |
| <td>If no coarse grid is available.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NEXT_COARSE_OBJ_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NEXT_COARSE_OBJ_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>next_global_id</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>next_local_id</i>, 
 | |
| int *<i>assigned</i>,
 | |
| int *<i>num_vert</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>vertices</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>in_vertex</i>, 
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>out_vertex</i>, 
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Next_Coarse_Obj</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| next_global_id, next_local_id,
 | |
| assigned, num_vert, vertices, in_vertex, out_vertex, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Next_Coarse_Obj 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: next_global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: next_local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: assigned, num_vertex, ierr 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: vertices, in_vertex, out_vertex 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NEXT_COARSE_OBJ_FN</b> query function is an iterator
 | |
| function that returns the next object in the initial coarse grid. 
 | |
| The first object
 | |
| of the iteration is provided by a <b><a href="#ZOLTAN_FIRST_COARSE_OBJ_FN">ZOLTAN_FIRST_COARSE_OBJ_FN</a></b>
 | |
| query function.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NEXT_COARSE_OBJ_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the previous object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the previous object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    next_global_id</i></td>
 | |
| 
 | |
| <td>Upon return, the global ID of the next object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    next_local_id</i></td>
 | |
| 
 | |
| <td>Upon return, the local ID of the next object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>assigned</i></td>
 | |
| 
 | |
| <td>Upon return, an integer indicating whether or not this object is currently
 | |
| assigned to this processor. A value of 1 indicates it is assigned to this
 | |
| processor; a value of 0 indicates it is assigned to some other processor.
 | |
| For elements that have been refined, it is ignored unless weights are assigned
 | |
| to interior nodes of the tree.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_vert</i></td>
 | |
| 
 | |
| <td>Upon return, the number of vertices for this object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    vertices</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertices of this object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    in_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, the vertex through which to enter this element in the
 | |
| user provided traversal. It is required only if the user is providing the
 | |
| order for the coarse grid objects (i.e., <i>in_order</i>==1) and allowing
 | |
| Zoltan to select the order of the children in at least one invocation of
 | |
| <b><a href="#ZOLTAN_CHILD_LIST_FN">ZOLTAN_CHILD_LIST_FN</a></b>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    out_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, the vertex through which to exit this element in the user
 | |
| provided traversal. The same provisions hold as for
 | |
| <i>in_vertex</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    1</td>
 | |
| 
 | |
| <td>If <i>global_id</i> and <i>local_id</i> contain valid IDs of the next
 | |
| object in the coarse grid.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    0</td>
 | |
| 
 | |
| <td>If no more objects are available.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_NUM_CHILD_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_NUM_CHILD_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Num_Child</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Num_Child 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_NUM_CHILD_FN</b> query function returns the number
 | |
| of children of the element with the given global and local IDs. If the
 | |
| element has not been refined, the number of children is 0.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_NUM_CHILD_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object for which the number of children is requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object for which the number of children is requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The number of children.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_CHILD_LIST_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_CHILD_LIST_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>parent_gid</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>parent_lid</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>child_gids</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>child_lids</i>,
 | |
| int *<i>assigned</i>,
 | |
| int *<i>num_vert</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>vertices</i>,
 | |
| <b>ZOLTAN_REF_TYPE</b> *<i>ref_type</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>in_vertex</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>out_vertex</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Child_List</i></b>(<i>data, num_gid_entries,
 | |
| num_lid_entries, parent_gid, parent_lid,
 | |
| child_gids, child_lids, assigned, num_vert, vertices, ref_type, in_vertex,
 | |
| out_vertex, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: parent_gid 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: parent_lid 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: child_gids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: child_lids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: assigned, num_vert, vertices,
 | |
| in_vertex, out_vertex 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ref_type, ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_CHILD_LIST_FN</b> query function returns lists
 | |
| of global IDs, local IDs, vertices, and order information for all children
 | |
| of a refined element. The vertices are designated by a global ID
 | |
| such that if two elements share a vertex then the same ID designates that
 | |
| vertex in both elements and on all processors. The user may choose to
 | |
| provide the order in which the children should be traversed, or have Zoltan
 | |
| determine the order based on the type of element refinement used to create
 | |
| the children. If the user provides the order, then entry and exit vertices
 | |
| for a path through the elements may also be provided. The arrays for the
 | |
| returned values are allocated by Zoltan; their size
 | |
| is determined by a call to a <b><a href="#ZOLTAN_NUM_CHILD_FN">ZOLTAN_NUM_CHILD_FN</a></b>
 | |
| query function.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_CHILD_LIST_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    parent_gid</i></td>
 | |
| 
 | |
| <td>The global ID of the object whose children are requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    parent_lid</i></td>
 | |
| 
 | |
| <td>The local ID of the object whose children are requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    child_gids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of all children of this object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    child_lids</i></td>
 | |
| 
 | |
| <td>Upon return, an array of local IDs of all children of this object. (Optional.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>assigned</i></td>
 | |
| 
 | |
| <td>Upon return, an array of integers indicating whether or not each child
 | |
| is currently assigned to this processor. A value of 1 indicates it is assigned
 | |
| to this processor; a value of 0 indicates it is assigned to some other
 | |
| processor. For children that have been further refined, it is ignored unless
 | |
| weights are assigned to interior nodes of the tree.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_vert</i></td>
 | |
| 
 | |
| <td>Upon return, an array containing the number of vertices for each object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    vertices</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertices of each object. If the
 | |
| number of vertices for objects 0 through <i>i</i>-1 is <i>N</i>, then the
 | |
| vertices for object <i>i</i> are in <i>vertices</i>[<i>N*num_gid_entries:
 | |
| (N+num_vert</i>[<i>i</i>]<i>)*num_gid_entries</i>]</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ref_type</i></td>
 | |
| 
 | |
| <td>Upon return, a value indicating what type of refinement was used to
 | |
| create the children. This determines how the children will be ordered.
 | |
| The values currently supported are:</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td></td>
 | |
| 
 | |
| <td VALIGN=TOP>    <i>ZOLTAN_TRI_BISECT</i> Bisection of triangles.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td></td>
 | |
| 
 | |
| <td VALIGN=TOP>    <i>ZOLTAN_QUAD_QUAD</i> Quadrasection of quadrilaterals.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td></td>
 | |
| 
 | |
| <td VALIGN=TOP>    <i>ZOLTAN_HEX3D_OCT</i> Octasection of hexahedra.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td></td>
 | |
| 
 | |
| <td VALIGN=TOP>    <i>ZOLTAN_OTHER_REF</i> All other forms of
 | |
| refinement.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td></td>
 | |
| 
 | |
| <td VALIGN=TOP>    <i>ZOLTAN_IN_ORDER</i> Traverse the children
 | |
| in the order in which they are provided.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    in_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertex through which to enter
 | |
| each element in the user provided traversal. It is required only if the
 | |
| user is providing the order for the children of this element (i.e.,
 | |
| <i>ref_type</i>==<i>ZOLTAN_IN_ORDER</i>)
 | |
| but does not provide the order for the children of at least one of those
 | |
| children.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    out_vertex</i></td>
 | |
| 
 | |
| <td>Upon return, an array of global IDs of the vertex through which to exit each
 | |
| element in the user provided traversal. The same provisions hold as for
 | |
| <i>in_vertex</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_CHILD_WEIGHT_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void<b> ZOLTAN_CHILD_WEIGHT_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>num_gid_entries</i>,
 | |
| int <i>num_lid_entries</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>global_id</i>,
 | |
| <a href="ug_usage.html#Data Types for Object IDs"><b>ZOLTAN_ID_PTR</b></a> <i>local_id</i>,
 | |
| int <i>wgt_dim</i>,
 | |
| float *<i>obj_wgt</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Child_Weight</i></b>(<i>data, num_gid_entries, num_lid_entries, global_id, local_id,
 | |
| wgt_dim, obj_wgt, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: local_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: wgt_dim 
 | |
| <br>REAL(Zoltan_FLOAT), INTENT(OUT), DIMENSION(*) :: obj_wgt 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_CHILD_WEIGHT_FN</b> query function returns the
 | |
| weight of an object. Interior nodes of the refinement tree as well as the
 | |
| leaves are allowed to have weights.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_CHILD_WEIGHT_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| global ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_GID_ENTRIES">NUM_GID_ENTRIES</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>num_lid_entries</i></td>
 | |
| 
 | |
| <td>The number of array entries used to describe a single
 | |
| local ID.  This value is the maximum value over all processors of
 | |
| the parameter <a href="ug_param.html#NUM_LID_ENTRIES">NUM_LID_ENTRIES</a>. (It should be zero if local ids are not used.)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object whose weight is requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object whose weight is requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>wgt_dim</i></td>
 | |
| 
 | |
| <td>The number of weights associated with an object (typically 1), or 0
 | |
| if weights are not requested.  This value is set through the parameter
 | |
| <a href="ug_param.html#OBJ_WEIGHT_DIM">OBJ_WEIGHT_DIM</a>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>obj_wgt</i></td>
 | |
| 
 | |
| <td>Upon return, an array containing the object's weights. If <i>wgt_dim</i>=0, the return
 | |
| value of <i>obj_wgts</i> is undefined and may be NULL.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <h2>
 | |
| <hr>
 | |
| <a NAME="Hierarchical Partitioning Functions"></a>
 | |
| <hr>
 | |
| Hierarchical Partitioning Functions (used only by method <B>HIER</B>)</h2>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HIER_NUM_LEVELS_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_HIER_NUM_LEVELS_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Hier_Num_Levels</i></b>(<i>data, nbor_proc, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Hier_Num_Levels
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_HIER_NUM_LEVELS_FN</b> query function
 | |
| returns, for the calling processor, the number of levels of hierarchy
 | |
| for hierarchical load balancing.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HIER_NUM_LEVELS_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>the number of levels of balancing hierarchy for method HIER.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HIER_PART_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef int <b>ZOLTAN_HIER_PART_FN</b>
 | |
| (void *<i>data</i>,
 | |
| int <i>level</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Get_Hier_Part</i></b>(<i>data, level, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Get_Hier_Part
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) ::: level 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_HIER_PART_FN</b> query function gets the part number to be used for the given level of a hierarchical balancing procedure.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HIER_PART_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>level</i></td>
 | |
| 
 | |
| <td>The level of a hierarchical balancing for which the part ID is requested.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Returned Value:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    int</td>
 | |
| 
 | |
| <td>The part number the process is to compute for this level.</td>
 | |
| </tr>
 | |
| 
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_HIER_METHOD_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C and C++:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_HIER_METHOD_FN</b>
 | |
| (void *<i>data</i>, 
 | |
| int <i>level</i>,
 | |
| struct Zoltan_Struct * <i>zz</i>,
 | |
| int *<i>ierr</i>); </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Get_Hier_Method</i></b>(<i>data, level, zz, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: level 
 | |
| <br>TYPE(Zoltan_Struct), INTENT(IN) :: zz 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT) :: ierr 
 | |
| <p><<i>type-data</i>> can be any of INTEGER(Zoltan_INT), DIMENSION(*) or
 | |
| REAL(Zoltan_FLOAT), DIMENSION(*) or REAL(Zoltan_DOUBLE), DIMENSION(*) or TYPE(Zoltan_User_Data_<i>x</i>)
 | |
| where <i>x</i> is 1, 2, 3 or 4. See the section on
 | |
| <a href="ug_fortran_api.html#fortran ug api query">Fortran
 | |
| query functions</a> for an explanation. </td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr WIDTH="100%">A <b>ZOLTAN_HIER_METHOD_FN</b> query function provides
 | |
|  to the calling process the Zoltan_Struct
 | |
|  to be used to guide the partitioning and load balancing at the
 | |
|  given level in the hierarchy.  This Zoltan_Struct can be passed to
 | |
|  Zoltan_Set_Param to set load balancing parameters for this level
 | |
|  in the hierarchical balancing.
 | |
| 
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_HIER_METHOD_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    data</i></td>
 | |
| 
 | |
| <td>Pointer to user-defined data.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>    <i>level</i></td>
 | |
| 
 | |
| <td>Level in the hierarchy being considered.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP>    <i>zz</i></td>
 | |
| 
 | |
| <td>Zoltan_Struct to use to set parameters.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    ierr</i></td>
 | |
| 
 | |
| <td>Error code to be set by function.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr><hr>
 | |
| 
 | |
| <p>
 | |
| <hr WIDTH="100%">[<a href="ug.html">Table of Contents</a>  | 
 | |
| <a href="ug_query_mig.html">Next: 
 | |
| Migration Query Functions</a>  |  <a href="ug_query.html">Previous: 
 | |
| Application-Registered Query Functions</a>  |  <a href="https://www.sandia.gov/general/privacy-security/index.html">Privacy and Security</a>]
 | |
| </body>
 | |
| </html>
 | |
| 
 |