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.
172 lines
8.0 KiB
172 lines
8.0 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
|
|
------->
|
|
|
|
<HTML>
|
|
<HEAD>
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
|
<META NAME="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; U; SunOS 5.6 sun4m) [Netscape]">
|
|
<META NAME="sandia.approved" CONTENT="SAND99-1376">
|
|
<META NAME="author" CONTENT="lee ann fisk, lafisk@sandia.gov">
|
|
<TITLE> Zoltan Developer's Guide: Degenerate Geometries</TITLE>
|
|
</HEAD>
|
|
<BODY BGCOLOR="#FFFFFF">
|
|
|
|
<div ALIGN=right><b><i><a href="dev.html">Zoltan Developer's Guide</a>
|
|
| <a href="dev_hsfc.html">Previous</a></i></b></div>
|
|
|
|
|
|
<H2>
|
|
<A NAME="HSFC"></A>Appendix: Handling Degenerate Geometries</H2>
|
|
|
|
The geometry processed by one of the geometric methods
|
|
<a href="dev_rcb.html">RCB</a>, <a href="dev_rib.html">RIB</a>, or
|
|
<a href="dev_hsfc.html">HSFC</a>
|
|
may be degenerate. By this we mean
|
|
it may have 3-dimensional coordinates but be essentially flat, or
|
|
it may have 3 or 2-dimensional coordinates but be essentially a line
|
|
in space. If we treat the geometry as a lower dimensional object
|
|
for the purpose of partitioning, the result may be a more natural
|
|
partition (one the user would have expected) and a faster
|
|
run time.
|
|
<p>
|
|
The caller may set the <B>REDUCE_DIMENSIONS</B> parameter to TRUE
|
|
in any of the three geometric methods if they want Zoltan to check
|
|
for a degenerate condition and do lower dimensional partitioning
|
|
if such a condition if found. They may set the <B>DEGENERATE_RATIO</B>
|
|
to specify how flat or thin a geometry must be to be considered
|
|
degenerate.
|
|
<p>
|
|
|
|
<H3>
|
|
Outline of Algorithm</H3>
|
|
|
|
All three geometric methods call
|
|
<a href="dev_services_objlist.html#Zoltan_Get_Coordinates"><b>Zoltan_Get_Coordinates</b></a>
|
|
to obtain the
|
|
problem coordinates. If <B>REDUCE_DIMENSIONS</B> is TRUE, we check
|
|
in this function to see if the geometry is degenerate. If it is,
|
|
we transform the coordinates to the lower dimensional space, flag
|
|
that the problem is now lower dimensional, and return the transformed
|
|
coordinates. The
|
|
<a href="dev_rcb.html">RCB</a>, <a href="dev_rib.html">RIB</a>, or
|
|
<a href="dev_hsfc.html">HSFC</a>
|
|
calculation is performed on the new coordinates in the lower dimensional
|
|
space.
|
|
<p>
|
|
If <B>KEEP_CUTS</B> is TRUE, the transformation is saved so that in
|
|
<a href="../ug_html/ug_interface_augment.html#Zoltan_LB_Box_Assign"><b>Zoltan_LB_Box_Assign</b></a> or <a href="../ug_html/ug_interface_augment.html#Zoltan_LB_Point_Assign"><b>Zoltan_LB_Point_Assign</b></a>
|
|
the coordinates can be transformed before the assignment is calculated.
|
|
If <B>RCB_REUSE</B> is TRUE in the <a href="dev_rcb.html">RCB</a> method,
|
|
the transformation is also saved. On re-partitioning, we can do some
|
|
simple tests to see if the degeneracy condition has changed before
|
|
completely re-calculating the coordinate transformation.
|
|
<p>
|
|
To determine if the geometry is degenerate, we calculate
|
|
the same inertial matrix that is calculated for <a href="dev_rib.html">RIB</a>,
|
|
except that we ignore vertex weights. The 3 orthogonal eigenvectors
|
|
of the inertial matrix describe the three primary directions of the
|
|
geometry. The bounding box oriented in these directions is tested
|
|
for degeneracy. In particular (for a 3 dimensional geometry) if the
|
|
length of the longest side divided by the length of the shortest side
|
|
exceeds the DEGENERATE_RATIO, we consider the geometry to be flat. If
|
|
in addition, the length longest side divided by the length of the
|
|
middle side exceeds the
|
|
DEGENERATE_RATIO, we consider the geometry to be essentially a line.
|
|
<p>
|
|
If a 3 dimensional geometry is determined to be flat, we transform
|
|
coordinates to a coordinate system where the XY plane corresponds
|
|
to the oriented bounding box,
|
|
and project all coordinates to that plane. These
|
|
X,Y coordinates are returned to the partitioning algorithm, which
|
|
performs two dimensional partitioning. Similarly if the geometry
|
|
is very thin, we transform coordinates to a coordinate system
|
|
with the X axis going through the
|
|
bounding box in it's principal direction, and project all points to
|
|
that axis. Then one dimensional partitioning is performed.
|
|
<p>
|
|
There is a small problem in calculating
|
|
<a href="../ug_html/ug_interface_augment.html#Zoltan_LB_Box_Assign"><b>Zoltan_LB_Box_Assign</b></a>
|
|
when the partitioning was performed
|
|
on transformed geometry. The caller provides the box vertices in
|
|
problem coordinates, but the partition was calculated in
|
|
transformed coordinates. When the vertices are transformed, they
|
|
are in general no longer the vertices of an axis-aligned box in
|
|
the new coordinate system. The
|
|
<B>Box_Assign</B> calculation requires an axis-aligned box, and
|
|
so we use the bounding box of the transformed vertices. The resulting
|
|
list of processes or parts intersecting the box may therefore
|
|
contain some processes or parts which actually do not intersect
|
|
the box in problem coordinates, however it will not omit any.
|
|
|
|
|
|
<H3>Data Structure Definitions</H3>
|
|
The transformation is stored in a <B>Zoltan_Transform_Struct</B>
|
|
structure which is
|
|
defined in <i>zz/zz_const.h</i>. It is saved as part of the algorithm
|
|
specific information stored in the
|
|
<b><a href="dev_add_struct.html">LB.Data_Structure</a></b> field of the
|
|
<b><a href="dev_lb_structs.html#Zoltan_Struct">Zoltan_Struct</a></b>.
|
|
The flag that indicates whether the geometry was found to be
|
|
degenerate is the <B>Target_Dim</B> field of this structure.
|
|
<p>
|
|
To use the degenerate geometry detection capability from a new
|
|
geometric method, you would add a <B>Zoltan_Transform_Struct</b>
|
|
structure to the algorithm specific data structure, add code to
|
|
<B>Zoltan_Get_Coordinates</B> to look for it, and check the
|
|
<B>Target_Dim</B> field on return to see if the problem dimension
|
|
was reduced. You would also need to include the
|
|
coordinate transformation in your Box_Assign and Point_Assign
|
|
functionality.
|
|
|
|
|
|
<BR>
|
|
<BR>
|
|
|
|
<P>
|
|
<HR WIDTH="100%">
|
|
<BR>[<A HREF="dev.html">Table of Contents</A>
|
|
| <A HREF="dev_hsfc.html"> Previous: Hibert Space Filling Curve (HSFC)</A> | <a href="https://www.sandia.gov/general/privacy-security/index.html">Privacy and Security</a>]
|
|
</BODY>
|
|
</HTML>
|
|
|