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.
		
		
		
		
		
			
		
			
				
					
					
						
							1695 lines
						
					
					
						
							60 KiB
						
					
					
				
			
		
		
	
	
							1695 lines
						
					
					
						
							60 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:  Migration Query Functions</title>
 | |
| 
 | |
| </head>
 | |
| <body bgcolor="#FFFFFF">
 | |
| 
 | |
| <div align=right><b><i><a href="ug.html">Zoltan User's Guide</a> 
 | |
| |  <a href="ug_param.html">Next</a>  |  <a href="ug_query_lb.html">Previous</a></i></b></div>
 | |
| 
 | |
| <h2>
 | |
| <a NAME="Migration Query Functions"></a>Migration Query Functions</h2>
 | |
| The following query functions must be registered to use any of the migration
 | |
| tools described in <a href="ug_interface_mig.html">Migration Functions</a>.
 | |
| These functions should NOT use interprocessor communication.
 | |
| <blockquote>
 | |
| <b><a href="#ZOLTAN_OBJ_SIZE_MULTI_FN">ZOLTAN_OBJ_SIZE_MULTI_FN</a></b>
 | |
| or
 | |
| <b><a href="#ZOLTAN_OBJ_SIZE_FN">ZOLTAN_OBJ_SIZE_FN</a></b> 
 | |
| <br>
 | |
| <b><a href="#ZOLTAN_PACK_OBJ_MULTI_FN">ZOLTAN_PACK_OBJ_MULTI_FN</a></b>
 | |
| or
 | |
| <b><a href="#ZOLTAN_PACK_OBJ_FN">ZOLTAN_PACK_OBJ_FN</a></b> 
 | |
| <br>
 | |
| <b><a href="#ZOLTAN_UNPACK_OBJ_MULTI_FN">ZOLTAN_UNPACK_OBJ_MULTI_FN</a></b>
 | |
| or
 | |
| <b><a href="#ZOLTAN_UNPACK_OBJ_FN">ZOLTAN_UNPACK_OBJ_FN</a></b> 
 | |
| </blockquote>
 | |
| The "MULTI_" versions of the packing/unpacking functions take lists of IDs
 | |
| as input and pack/unpack data for all objects in the lists.  Only one function
 | |
| of each type must be provided (e.g., either a 
 | |
| <b><a href="#ZOLTAN_PACK_OBJ_FN">ZOLTAN_PACK_OBJ_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_PACK_OBJ_MULTI_FN">ZOLTAN_PACK_OBJ_MULTI_FN</a></b>,
 | |
| but not both).
 | |
| <p>
 | |
| Optional, additional query functions for migration may also be registered; these
 | |
| functions are called at the beginning, middle, and end of migration in
 | |
| <a href="ug_interface_mig.html#Zoltan_Migrate"><b>Zoltan_Migrate</b></a>.
 | |
| Interprocessor communication is allowed in these functions.
 | |
| <blockquote>
 | |
| <b><a href="#ZOLTAN_PRE_MIGRATE_PP_FN">ZOLTAN_PRE_MIGRATE_PP_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_MID_MIGRATE_PP_FN">ZOLTAN_MID_MIGRATE_PP_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_POST_MIGRATE_PP_FN">ZOLTAN_POST_MIGRATE_PP_FN</a></b>
 | |
| </blockquote>
 | |
| 
 | |
| For <a href="ug_backward.html">backward compatibility</a> 
 | |
| with previous versions of Zoltan, 
 | |
| the following functions may be used with 
 | |
| <a href="ug_interface_mig.html#Zoltan_Help_Migrate"><b>Zoltan_Help_Migrate</b></a>.
 | |
| <blockquote>
 | |
| <b><a href="#ZOLTAN_PRE_MIGRATE_FN">ZOLTAN_PRE_MIGRATE_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_MID_MIGRATE_FN">ZOLTAN_MID_MIGRATE_FN</a></b>
 | |
| <br><b><a href="#ZOLTAN_POST_MIGRATE_FN">ZOLTAN_POST_MIGRATE_FN</a></b>
 | |
| </blockquote>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_OBJ_SIZE_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_OBJ_SIZE_FN</b>(
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>,  
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>global_id</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>local_id</i>, 
 | |
| <br>      int <i>*ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>FUNCTION <b><i>Obj_Size</i></b>(<i>data, num_gid_entries,  num_lid_entries</i>,
 | |
| <i>global_id, local_id, ierr</i>) 
 | |
| <br>INTEGER(Zoltan_INT) :: Obj_Size 
 | |
| <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,  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_OBJ_SIZE_FN</b> query function returns the size
 | |
| (in bytes) of the data buffer that is needed to pack all of a single object's
 | |
| data.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_OBJ_SIZE_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 VALIGN=TOP NOSAVE>
 | |
| <td>   <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td NOSAVE>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 VALIGN=TOP NOSAVE>
 | |
| <td><i>   num_lid_entries</i></td>
 | |
| 
 | |
| <td NOSAVE>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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>   <i>global_id</i></td>
 | |
| 
 | |
| <td>Pointer to the global ID of the object.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>   <i>local_id</i></td>
 | |
| 
 | |
| <td>Pointer to the local ID of the object.</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 size (in bytes) of the required data buffer.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_OBJ_SIZE_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_OBJ_SIZE_MULTI_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>local_ids</i>, 
 | |
| <br>      int <i>*sizes</i>, 
 | |
| <br>      int <i>*ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Obj_Size_Multi</i></b>(<i>data, num_gid_entries,  num_lid_entries</i>,
 | |
| <i>num_ids, global_ids, local_ids, sizes, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries, num_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_ids,  local_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: sizes 
 | |
| <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_SIZE_MULTI_FN</b> 
 | |
| query function is the multiple-ID
 | |
| version of <a href="#ZOLTAN_OBJ_SIZE_FN"><b>ZOLTAN_OBJ_SIZE_FN</b></a>.  
 | |
| For a list of objects, it returns the per-objects sizes
 | |
| (in bytes) of the data buffers needed to pack object
 | |
| data.
 | |
| <br> 
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_OBJ_SIZE_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 VALIGN=TOP NOSAVE>
 | |
| <td>   <i>num_gid_entries</i></td>
 | |
| 
 | |
| <td NOSAVE>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 VALIGN=TOP NOSAVE>
 | |
| <td><i>   num_lid_entries</i></td>
 | |
| 
 | |
| <td NOSAVE>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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP NOSAVE>
 | |
| <td><i>   num_ids</i></td>
 | |
| 
 | |
| <td NOSAVE>The number of objects whose sizes are to be returned.
 | |
| </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>   <i>global_ids</i></td>
 | |
| 
 | |
| <td>An array of global IDs of the objects.  The ID for the <i>i</i>-th 
 | |
| object begins in <i>global_ids[i*num_gid_entries]</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>   <i>local_ids</i></td>
 | |
| 
 | |
| <td>An array of local IDs of the objects.   The ID for the <i>i</i>-th 
 | |
| object begins in <i>local_ids[i*num_lid_entries]</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>   sizes</i></td>
 | |
| 
 | |
| <td>Upon return, array of sizes (in bytes) for each object in the ID lists.</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_PACK_OBJ_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_PACK_OBJ_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>global_id</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>local_id</i>, 
 | |
| <br>      int <i>dest</i>, 
 | |
| <br>      int <i>size</i>, 
 | |
| <br>      char *<i>buf</i>,
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Pack_Obj</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| global_id, local_id, dest, size, buf, 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) :: dest, size 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: buf 
 | |
| <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_PACK_OBJ_FN</b> query function allows the application
 | |
| to tell Zoltan how to copy all needed data for a given
 | |
| object into a communication buffer. The object's data can then be sent
 | |
| to another processor as part of data migration. It may also perform other
 | |
| operations, such as removing the object from the processor's data structure.
 | |
| This routine is called by <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| for each object to be sent to another processor.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_PACK_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 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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object for which data should be copied into the
 | |
| communication buffer.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    local_id</i></td>
 | |
| 
 | |
| <td>The local ID of the object for which data should be copied into the
 | |
| communication buffer.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    dest</i></td>
 | |
| 
 | |
| <td>The destination part (i.e., the part to which the object
 | |
| is being sent)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    size</i></td>
 | |
| 
 | |
| <td>The size (in bytes) of the communication buffer for the specified object.
 | |
| This value is at least as large as the value returned by 
 | |
| the <b><a href="#ZOLTAN_OBJ_SIZE_MULTI_FN">ZOLTAN_OBJ_SIZE_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_OBJ_SIZE_FN">ZOLTAN_OBJ_SIZE_FN</a></b>
 | |
| query function; it may be slightly larger due to padding for data alignment
 | |
| in the buffer.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    buf</i></td>
 | |
| 
 | |
| <td>The starting address of the communication buffer into which the object's
 | |
| data should be packed.</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_PACK_OBJ_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_PACK_OBJ_MULTI_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>local_ids</i>, 
 | |
| <br>      int <i>*dest</i>, 
 | |
| <br>      int <i>*sizes</i>, 
 | |
| <br>      int <i>*idx</i>, 
 | |
| <br>      char *<i>buf</i>,
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Pack_Obj_Multi</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_ids, global_ids, local_ids, dest, sizes, idx, buf, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(IN) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries, num_ids 
 | |
| <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(*) :: dest
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: sizes 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: idx 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(OUT), DIMENSION(*) :: buf 
 | |
| <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_PACK_OBJ_MULTI_FN</b> query function is the 
 | |
| multiple-ID version of a
 | |
| <a href="#ZOLTAN_PACK_OBJ_FN"><b>ZOLTAN_PACK_OBJ_FN</b></a>.  It allows the application
 | |
| to tell Zoltan how to copy all needed data for a given list of 
 | |
| objects into a communication buffer.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_PACK_OBJ_FN_MULTI_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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP NOSAVE>
 | |
| <td><i>   num_ids</i></td>
 | |
| 
 | |
| <td NOSAVE>The number of objects to be packed.
 | |
| </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>   <i>global_ids</i></td>
 | |
| 
 | |
| <td>An array of global IDs of the objects.  The ID for the <i>i</i>-th 
 | |
| object begins in <i>global_ids[i*num_gid_entries]</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td>   <i>local_ids</i></td>
 | |
| 
 | |
| <td>An array of local IDs of the objects.   The ID for the <i>i</i>-th 
 | |
| object begins in <i>local_ids[i*num_lid_entries]</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    dest</i></td>
 | |
| 
 | |
| <td>An array of destination part numbers (i.e., the parts to which the objects
 | |
| are being sent)</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    sizes</i></td>
 | |
| 
 | |
| <td>An array containing the per-object sizes (in bytes) of the communication 
 | |
| buffer for each object. Each value is at least as large as the corresponding
 | |
| value returned by 
 | |
| the <b><a href="#ZOLTAN_OBJ_SIZE_MULTI_FN">ZOLTAN_OBJ_SIZE_MULTI_FN</a></b>
 | |
| or <b><a href="#ZOLTAN_OBJ_SIZE_FN">ZOLTAN_OBJ_SIZE_FN</a></b>
 | |
| query function; it may be slightly larger due to padding for data alignment
 | |
| in the buffer.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    idx</i></td>
 | |
| 
 | |
| <td>For each object, an index into the <i>buf</i> array giving the starting
 | |
| location of that object's data.
 | |
|  Data for the <i>i</i>-th object are stored in
 | |
|                               <i>buf[idx[i]],
 | |
|                                 buf[idx[i]+1], ...,
 | |
|                                 buf[idx[i]+sizes[i]-1]</i>.
 | |
| Because Zoltan adds some tag information
 | |
|    to packed data, <i>idx[i]</i>  !=  sum[<i>j</i>=0,<i>i</i>-1](<i>sizes[j]</i>).
 | |
| 
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    buf</i></td>
 | |
| 
 | |
| <td>The address of the communication buffer into which the objects'
 | |
| data should be packed.</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_UNPACK_OBJ_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_UNPACK_OBJ_FN</b>
 | |
| (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>global_id</i>, 
 | |
| <br>      int <i>size</i>, 
 | |
| <br>      char *<i>buf</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Unpack_Obj</i></b>(<i>data, num_gid_entries, global_id,
 | |
| size, buf, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_id 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: size 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: buf 
 | |
| <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_UNPACK_OBJ_FN</b> query function allows the application
 | |
| to tell Zoltan how to copy all needed data for a given
 | |
| object from a communication buffer into the application's data structure.
 | |
| This operation is needed as the final step of importing objects during
 | |
| data migration. The query function may also perform other computation,
 | |
| such as building request lists for related data. This routine is called
 | |
| by <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| for each object to be received by the processor. (Note: a local ID for
 | |
| the object is not included in this function, as the local ID is local to
 | |
| the exporting, not the importing, processor.)
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_UNPACK_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 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>    global_id</i></td>
 | |
| 
 | |
| <td>The global ID of the object whose data has been received in the communication
 | |
| buffer.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    size</i></td>
 | |
| 
 | |
| <td>The size (in bytes) of the object's data in the communication buffer.
 | |
| This value is at least as large as the value returned by 
 | |
| the <b><a href="#ZOLTAN_OBJ_SIZE_MULTI_FN">ZOLTAN_OBJ_SIZE_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_OBJ_SIZE_FN">ZOLTAN_OBJ_SIZE_FN</a></b>
 | |
| query function; it may be slightly larger due to padding for data alignment
 | |
| in the buffer.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    buf</i></td>
 | |
| 
 | |
| <td>The starting address of the communication buffer for this object.</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_UNPACK_OBJ_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_UNPACK_OBJ_MULTI_FN</b>
 | |
| (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>global_ids</i>, 
 | |
| <br>      int <i>*sizes</i>, 
 | |
| <br>      int <i>*idx</i>, 
 | |
| <br>      char *<i>buf</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Unpack_Obj_Multi</i></b>(<i>data, num_gid_entries, num_ids, global_ids, 
 | |
| sizes, idx, buf, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: global_ids
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: sizes 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: idx 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: buf 
 | |
| <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_UNPACK_OBJ_MULTI_FN</b> query function is the
 | |
| multiple-ID version of a
 | |
| <a href="#ZOLTAN_UNPACK_OBJ_FN"><b>ZOLTAN_UNPACK_OBJ_FN</b></a>.
 | |
| It allows the application
 | |
| to tell Zoltan how to copy all needed data for a given list of
 | |
| objects from a communication buffer into the application's data structure.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_UNPACK_OBJ_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 VALIGN=TOP NOSAVE>
 | |
| <td><i>   num_ids</i></td>
 | |
| 
 | |
| <td NOSAVE>The number of objects to be unpacked.
 | |
| </td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td>   <i>global_ids</i></td>
 | |
| 
 | |
| <td>An array of global IDs of the objects.  The ID for the <i>i</i>-th 
 | |
| object begins in <i>global_ids[i*num_gid_entries]</i>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    sizes</i></td>
 | |
| 
 | |
| <td>An array containing the per-object sizes (in bytes) of the communication buffer for each object.
 | |
| Each value is at least as large as the corresponding value returned by 
 | |
| the <b><a href="#ZOLTAN_OBJ_SIZE_MULTI_FN">ZOLTAN_OBJ_SIZE_MULTI_FN</a></b> or
 | |
| <b><a href="#ZOLTAN_OBJ_SIZE_FN">ZOLTAN_OBJ_SIZE_FN</a></b>
 | |
| query function; it may be slightly larger due to padding for data alignment
 | |
| in the buffer.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    idx</i></td>
 | |
| 
 | |
| <td>For each object, an index into the <i>buf</i> array giving the starting
 | |
| location of that object's data.
 | |
|  Data for the <i>i</i>-th object are stored in
 | |
|                               <i>buf[idx[i]],
 | |
|                                 buf[idx[i]+1], ...,
 | |
|                                 buf[idx[i]+sizes[i]-1]</i>.
 | |
| Because Zoltan adds some tag information
 | |
|    to packed data, <i>idx[i]</i>  !=  sum[<i>j</i>=0,<i>i</i>-1](<i>sizes[j]</i>).
 | |
| 
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    buf</i></td>
 | |
| 
 | |
| <td>The address of the communication buffer from which data is unpacked.</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_PRE_MIGRATE_PP_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_PRE_MIGRATE_PP_FN</b>
 | |
| (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_import</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_global_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_local_ids</i>, 
 | |
| <br>      int *<i>import_procs</i>, 
 | |
| <br>      int *<i>import_to_part</i>, 
 | |
| <br>      int <i>num_export</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_local_ids</i>, 
 | |
| <br>      int *<i>export_procs</i>, 
 | |
| <br>      int *<i>export_to_part</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Pre_Migrate_PP</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_import, import_global_ids, import_local_ids, import_procs, import_to_part, num_export,
 | |
| export_global_ids, export_local_ids, export_procs, export_to_part, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_import, num_export 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_global_ids, export_global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_local_ids, export_local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_procs, export_procs 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_to_part, export_to_part 
 | |
| <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_PRE_MIGRATE_PP_FN</b> query function performs any
 | |
| pre-processing desired by the application. If it is registered, it is called
 | |
| at the beginning of the <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| routine. The arguments passed to <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| are made available for use in the pre-processing routine.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_PRE_MIGRATE_PP_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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_import</i></td>
 | |
| 
 | |
| <td>The number of objects that will be received by this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_global_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_import</i> global IDs of objects
 | |
| to be received by this processor. This array may be NULL, as the processor
 | |
| does not necessarily need to know which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_local_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_import</i> local IDs of objects
 | |
| to be received by this processor. This array may be NULL, as the processor
 | |
| does not necessarily need to know which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_procs</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_import</i> listing the processor IDs of the
 | |
| source processors. This array may be NULL, as the processor does not necessarily
 | |
| need to know which objects is will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_to_part</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_import</i> listing the parts to which
 | |
| objects will be imported.
 | |
| This array may be NULL, as the processor does not necessarily
 | |
| need to know from which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_export</i></td>
 | |
| 
 | |
| <td>The number of objects that will be sent from this processor to other
 | |
| processors.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_global_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_export</i> global IDs of objects
 | |
| to be sent from this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_local_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_export</i> local IDs of objects
 | |
| to be sent from this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_procs</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_export</i> listing the processor IDs of the
 | |
| destination processors.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_to_part</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_export</i> listing the parts to which
 | |
| objects will be sent. </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>Default:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>No pre-processing is done if a <b>ZOLTAN_PRE_MIGRATE_PP_FN</b> is not registered.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_MID_MIGRATE_PP_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_MID_MIGRATE_PP_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_import</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_global_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_local_ids</i>, 
 | |
| <br>      int *<i>import_procs</i>, 
 | |
| <br>      int *<i>import_to_part</i>, 
 | |
| <br>      int <i>num_export</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_local_ids</i>, 
 | |
| <br>      int *<i>export_procs</i>, 
 | |
| <br>      int *<i>export_to_part</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Mid_Migrate_PP</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_import, import_global_ids, import_local_ids, import_procs, import_to_part, num_export,
 | |
| export_global_ids, export_local_ids, export_procs, export_to_part, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_import, num_export 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_global_ids, export_global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_local_ids, export_local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_procs, export_procs 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_to_part, export_to_part 
 | |
| <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_MID_MIGRATE_PP_FN</b> query function performs any
 | |
| processing desired by the application between the packing and unpacking
 | |
| of objects being migrated. If it is registered, it is called after export
 | |
| objects are packed in <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>;
 | |
| imported objects are unpacked after the <b>ZOLTAN_MID_MIGRATE_PP_FN</b> query
 | |
| function is called. The arguments passed to <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| are made available for use in the processing routine.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <caption>, </caption>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_MID_MIGRATE_PP_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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_import</i></td>
 | |
| 
 | |
| <td>The number of objects that will be received by this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_global_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_import</i> global IDs of objects
 | |
| to be received by this processor. This array may be NULL, as the processor
 | |
| does not necessarily need to know which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_local_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_import</i> local IDs of objects
 | |
| to be received by this processor. This array may be NULL, as the processor
 | |
| does not necessarily need to know which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_procs</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_import</i> listing the processor IDs of the
 | |
| source processors. This array may be NULL, as the processor does not necessarily
 | |
| need to know which objects is will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_to_part</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_import</i> listing the parts to which
 | |
| objects will be imported.
 | |
| This array may be NULL, as the processor does not necessarily
 | |
| need to know from which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_export</i></td>
 | |
| 
 | |
| <td>The number of objects that will be sent from this processor to other
 | |
| processors.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_global_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_export</i> global IDs of objects
 | |
| to be sent from this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_local_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_export</i> local IDs of objects
 | |
| to be sent from this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_procs</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_export</i> listing the processor IDs of the
 | |
| destination processors.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_to_part</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_export</i> listing the parts to which
 | |
| objects will be sent. </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>Default:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>No processing is done if a <b>ZOLTAN_MID_MIGRATE_PP_FN</b> is not registered.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_POST_MIGRATE_PP_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_POST_MIGRATE_PP_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_import</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_global_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_local_ids</i>, 
 | |
| <br>      int *<i>import_procs</i>, 
 | |
| <br>      int *<i>import_to_part</i>, 
 | |
| <br>      int <i>num_export</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_local_ids</i>, 
 | |
| <br>      int *<i>export_procs</i>, 
 | |
| <br>      int *<i>export_to_part</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Post_Migrate_PP</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_import, import_global_ids, import_local_ids, import_procs, import_to_part, num_export,
 | |
| export_global_ids, export_local_ids, export_procs, export_to_part, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_import, num_export 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_global_ids, export_global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_local_ids, export_local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_procs, export_procs 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_to_part, export_to_part 
 | |
| <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_POST_MIGRATE_PP_FN</b> query function performs any
 | |
| post-processing desired by the application. If it is registered, it is
 | |
| called at the end of the <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| routine. The arguments passed to <b><a href="ug_interface_mig.html#Zoltan_Migrate">Zoltan_Migrate</a></b>
 | |
| are made available for use in the post-processing routine.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_POST_MIGRATE_PP_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>.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_import</i></td>
 | |
| 
 | |
| <td>The number of objects that will be received by this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_global_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_import</i> global IDs of objects
 | |
| to be received by this processor. This array may be NULL, as the processor
 | |
| does not necessarily need to know which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_local_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_import</i> local IDs of objects
 | |
| to be received by this processor. This array may be NULL, as the processor
 | |
| does not necessarily need to know which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_procs</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_import</i> listing the processor IDs of the
 | |
| source processors. This array may be NULL, as the processor does not necessarily
 | |
| need to know which objects is will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    import_to_part</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_import</i> listing the parts to which
 | |
| objects will be imported.
 | |
| This array may be NULL, as the processor does not necessarily
 | |
| need to know from which objects it will receive.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    num_export</i></td>
 | |
| 
 | |
| <td>The number of objects that will be sent from this processor to other
 | |
| processors.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_global_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_export</i> global IDs of objects
 | |
| to be sent from this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_local_ids</i></td>
 | |
| 
 | |
| <td>An array of <i>num_export</i> local IDs of objects
 | |
| to be sent from this processor.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_procs</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_export</i> listing the processor IDs of the
 | |
| destination processors.</td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><i>    export_to_part</i></td>
 | |
| 
 | |
| <td>An array of size <i>num_export</i> listing the parts to which
 | |
| objects will be sent. </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>Default:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>No post-processing is done if a <b>ZOLTAN_POST_MIGRATE_PP_FN</b> is not registered.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_PRE_MIGRATE_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_PRE_MIGRATE_FN</b>
 | |
| (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_import</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_global_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_local_ids</i>, 
 | |
| <br>      int *<i>import_procs</i>, 
 | |
| <br>      int <i>num_export</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_local_ids</i>, 
 | |
| <br>      int *<i>export_procs</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Pre_Migrate</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_import, import_global_ids, import_local_ids, import_procs, num_export,
 | |
| export_global_ids, export_local_ids, export_procs, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_import, num_export 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_global_ids, export_global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_local_ids, export_local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_procs, export_procs 
 | |
| <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_PRE_MIGRATE_FN</b> query function performs any
 | |
| pre-processing desired by applications using 
 | |
| <b><a href="ug_interface_mig.html#Zoltan_Help_Migrate">Zoltan_Help_Migrate</a></b>.
 | |
| Its function is analogous to 
 | |
| <b><a href="#ZOLTAN_PRE_MIGRATE_PP_FN">ZOLTAN_PRE_MIGRATE_PP_FN</a></b>, but
 | |
| it cannot be used with <a href="ug_interface_mig.html#Zoltan_Migrate"><b>Zoltan_Migrate</b></a>.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_PRE_MIGRATE_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>
 | |
| All arguments are analogous to those in
 | |
| <a href="#ZOLTAN_PRE_MIGRATE_PP_FN"><b>ZOLTAN_PRE_MIGRATE_PP_FN</b></a>.
 | |
| Part-assignment arguments <i>import_to_part</i> and <i>export_to_part</i>
 | |
| are not included, as processor and parts
 | |
| numbers are considered to be the same in 
 | |
| <a href="ug_interface_mig.html#Zoltan_Help_Migrate"><b>Zoltan_Help_Migrate</b></a>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Default:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>No pre-processing is done if a <b>ZOLTAN_PRE_MIGRATE_FN</b> is not registered.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_MID_MIGRATE_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_MID_MIGRATE_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_import</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_global_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_local_ids</i>, 
 | |
| <br>      int *<i>import_procs</i>, 
 | |
| <br>      int <i>num_export</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_local_ids</i>, 
 | |
| <br>      int *<i>export_procs</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Mid_Migrate</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_import, import_global_ids, import_local_ids, import_procs, num_export,
 | |
| export_global_ids, export_local_ids, export_procs, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_import, num_export 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_global_ids, export_global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_local_ids, export_local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_procs, export_procs 
 | |
| <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_MID_MIGRATE_FN</b> query function performs any
 | |
| mid-migration processing desired by applications using 
 | |
| <b><a href="ug_interface_mig.html#Zoltan_Help_Migrate">Zoltan_Help_Migrate</a></b>.
 | |
| Its function is analogous to 
 | |
| <b><a href="#ZOLTAN_MID_MIGRATE_PP_FN">ZOLTAN_MID_MIGRATE_PP_FN</a></b>, but
 | |
| it cannot be used with <a href="ug_interface_mig.html#Zoltan_Migrate"><b>Zoltan_Migrate</b></a>.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_MID_MIGRATE_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>
 | |
| All arguments are analogous to those in
 | |
| <a href="#ZOLTAN_MID_MIGRATE_PP_FN"><b>ZOLTAN_MID_MIGRATE_PP_FN</b></a>.
 | |
| Part-assignment arguments <i>import_to_part</i> and <i>export_to_part</i>
 | |
| are not included, as processor and parts
 | |
| numbers are considered to be the same in 
 | |
| <a href="ug_interface_mig.html#Zoltan_Help_Migrate"><b>Zoltan_Help_Migrate</b></a>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Default:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>No processing is done if a <b>ZOLTAN_MID_MIGRATE_FN</b> is not registered.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <p>
 | |
| 
 | |
| <!------------------------------------------------------------------------->
 | |
| <hr WIDTH="100%">
 | |
| <a NAME="ZOLTAN_POST_MIGRATE_FN"></a>
 | |
| <hr WIDTH="100%">
 | |
| <table WIDTH="100%" NOSAVE >
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP NOSAVE>C:</td>
 | |
| 
 | |
| <td WIDTH="85%">
 | |
| typedef void <b>ZOLTAN_POST_MIGRATE_FN</b> (
 | |
| <br>      void *<i>data</i>, 
 | |
| <br>      int <i>num_gid_entries</i>, 
 | |
| <br>      int <i>num_lid_entries</i>,
 | |
| <br>      int <i>num_import</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_global_ids</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>import_local_ids</i>, 
 | |
| <br>      int *<i>import_procs</i>, 
 | |
| <br>      int <i>num_export</i>,
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_global_ids</i>, 
 | |
| <br>      <b><a href="ug_usage.html#Data Types for Object IDs">ZOLTAN_ID_PTR</a></b> <i>export_local_ids</i>, 
 | |
| <br>      int *<i>export_procs</i>, 
 | |
| <br>      int *<i>ierr</i>);
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr NOSAVE>
 | |
| <td VALIGN=TOP WIDTH="15%" NOSAVE>FORTRAN:</td>
 | |
| 
 | |
| <td>SUBROUTINE <b><i>Post_Migrate</i></b>(<i>data, num_gid_entries, num_lid_entries,
 | |
| num_import, import_global_ids, import_local_ids, import_procs, num_export,
 | |
| export_global_ids, export_local_ids, export_procs, ierr</i>) 
 | |
| <br><<i>type-data</i>>, INTENT(INOUT) :: data 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_gid_entries, num_lid_entries 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN) :: num_import, num_export 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_global_ids, export_global_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_local_ids, export_local_ids 
 | |
| <br>INTEGER(Zoltan_INT), INTENT(IN), DIMENSION(*) :: import_procs, export_procs 
 | |
| <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_POST_MIGRATE_FN</b> query function performs any
 | |
| post-processing desired by applications using 
 | |
| <b><a href="ug_interface_mig.html#Zoltan_Help_Migrate">Zoltan_Help_Migrate</a></b>.
 | |
| Its function is analogous to 
 | |
| <b><a href="#ZOLTAN_POST_MIGRATE_PP_FN">ZOLTAN_POST_MIGRATE_PP_FN</a></b>, but
 | |
| it cannot be used with <a href="ug_interface_mig.html#Zoltan_Migrate"><b>Zoltan_Migrate</b></a>.
 | |
| <br> 
 | |
| <table WIDTH="100%" >
 | |
| <tr>
 | |
| <td VALIGN=TOP WIDTH="20%"><b>Function Type:</b></td>
 | |
| 
 | |
| <td WIDTH="80%"><b>ZOLTAN_POST_MIGRATE_FN_TYPE</b></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Arguments:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>
 | |
| All arguments are analogous to those in
 | |
| <a href="#ZOLTAN_POST_MIGRATE_PP_FN"><b>ZOLTAN_POST_MIGRATE_PP_FN</b></a>.
 | |
| Part-assignment arguments <i>import_to_part</i> and <i>export_to_part</i>
 | |
| are not included, as processor and parts
 | |
| numbers are considered to be the same in 
 | |
| <a href="ug_interface_mig.html#Zoltan_Help_Migrate"><b>Zoltan_Help_Migrate</b></a>.
 | |
| </td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP><b>Default:</b></td>
 | |
| 
 | |
| <td></td>
 | |
| </tr>
 | |
| 
 | |
| <tr>
 | |
| <td VALIGN=TOP></td>
 | |
| 
 | |
| <td>No post-processing is done if a <b>ZOLTAN_POST_MIGRATE_FN</b> is not registered.</td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| 
 | |
| <p>
 | |
| <hr WIDTH="100%">[<a href="ug.html">Table of Contents</a>  | 
 | |
| <a href="ug_param.html">Next: 
 | |
| Zoltan Parameters and Output Levels</a>  |  <a href="ug_query_lb.html">Previous: 
 | |
| Load-Balancing Query Functions</a>  |  <a href="https://www.sandia.gov/general/privacy-security/index.html">Privacy and Security</a>]
 | |
| </body>
 | |
| </html>
 | |
| 
 |